问题标签 [bionic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - proc/pid/maps 条目的顺序
所以地图文件中的每个条目都有它们被映射的开始和结束地址。如果库是动态加载的(可能使用 dlopen()),以前条目的地址会受到任何影响吗?(当然假设进程的 pid 没有改变)。
换句话说,在 dlopen() 之前,这里是 maps-> 中的示例条目
addr1 - addr2 r-xp 00000000 08:02 135522 /usr/lib64/lib_sample.so
在 dlopen()'ing lib_demo.so 之后,lib_sample.so 的值 addr1/addr2 会改变吗?
具体来说,我想知道 Android 上的行为。
提前致谢。
android - 如何在仿生 libc 中获取 uid?
我正在尝试获取在仿生 libc 中调用 dns 文件的进程的 uid。我知道使用 current->cred->uid.val 用于获取 android/linux 内核中的 uid,但如何获取仿生 libc 中的 uid。我不认为同样会起作用。您能否建议我一种在仿生 libc 中获取 uid 的方法以及使用哪些标头?
android - 仿生 libc (android) 中的 sendmsg 套接字系统调用参数
我正在浏览仿生 libc 套接字系统调用,并注意到一些令人困惑的东西。android/bionic/libc/include/sys/socket.h 有一个 sendmsg 的系统调用声明为
__socketcall int sendmsg (int, const struct msghdr*, int);
而在其他地方 /android/bionic/libc/SYSCALLS.TXT #sockets 和 #sockets for x86 中 sendmsg 的系统调用声明有
int sendmsg(int, const struct msghdr*, unsigned int) arm,arm64,mips,mips64,x86_64
int sendmsg:socketcall:16(int, const struct msghdr*, unsigned int) x86
为什么标志数据类型的声明有变化(socket.h 中的 int 和 SYSCALLS.TXT 中的 unsigned int)。即使在 kernel/net/socket.c 中的内核系统调用中,系统调用也被定义为
SYSCALL_DEFINE3(sendmsg,int,fd,struct user_msghdr __user*,msg,unsigned int,flags) { }
该标志被声明为无符号整数。只有在 libc 的 include/sys/socket.h 中,标志是 int。你能解释一下为什么会这样吗?如果我在 socket.h 中将声明更改为 'unsigned int' 会发生什么
pthreads - 仿生libc中没有pthread库吗?
我正在使用工具链来交叉编译一些依赖于 android 的 lpthread 的库。它有 libc 的仿生版本。它说找不到 lpthred 并且在工具链中找不到 libpthread.so。那么仿生libc中没有pthread库吗?如果是,我需要做些什么来解决这种依赖关系?如果没有,我怎样才能获得 pthread 源,以便我可以通过交叉编译创建 libpthread.so?
android - 受精卵产生过程的 LD_DEBUG 模拟
我想知道 Android 是否可以让用户LD_DEBUG
为 Zygote 生成的进程启用 -style 日志。如果不是 root 用户,我们可能无法app_process
在自定义环境中启动 Zygote。因此,也许有一些系统属性或链接器 API 允许为某些可能包含本机库的可调试 Android 包获取动态链接器日志。
android - Android 的 C 代码交叉编译
我在Ubuntu 16.04 LTS下使用arm-linux-gnueabi工具为Android ARM交叉编译了我的 C 应用程序。我用静态链接标志编译它。这个 C 应用程序很大,而且它有复杂的 makefile。它编译成功,没有任何错误。但它在 Android 手机和 Ubuntu PC 上的行为不同。更准确地说,我有两个问题:
popen()
和system()
功能在 Android 上不起作用。它们被执行但什么也不做,也没有给出任何错误。我用肮脏的黑客解决了这个问题。fgets()
函数在 Android 上工作起来很奇怪。
1.关于第一个问题。
我做了一些小研究,发现 Android 不使用普通的libc 库(glibc或其他正确实现 POSIX 标准的库)。它使用Bionic库而不是它(抱歉,Android 对我来说是新操作系统)。我查看了函数代码popen()
并system()
注意到这些函数使用_PATH_BSHELL
宏。_PATH_BSHELL
是实际系统外壳的路径。此路径在 Android 上为“ /system/bin/sh ”,在 Ubuntu 上为“ /bin/sh ”。
当我理解它时,我试图挂钩popen()
和system()
功能。我从仿生源复制了这些函数的代码,然后定义了宏#define _MY_PATH_BSHELL "/system/bin/sh"
并替换execve(_MY_PATH_BSHELL, argp, environ);
了调用,比如execve(_MY_PATH_BSHELL, argp, environ);
调用。所以它开始正常工作。
2.关于第二个问题。
在 Ubuntu 上,这段代码可以正常工作:
但在 Android 上fgets()
总是返回NULL
,并且这个循环无限长。我尝试使用read()
函数而不是fgets()
它,它起作用了。在 Android 上,此代码read()
可以正常工作:
我的问题。
- 如何巧妙而正确地解决我的
popen()
问题system()
?我想我必须与仿生库静态链接。这样对吗?我如何在没有 Android Studio 的情况下在控制台中执行此操作?我读到有必要使用NDK,但我不清楚如何使用。 - 为什么
fgets()
Android 和 Ubuntu 上的行为不相似?
android - 仿生 libc 中的 pthread_mutex_t
我正在尝试将使用的代码移植glibc
到 Android NDK 中并遇到一些与mutexes
. 目前我们的代码使用mutex.__data.__count
循环遍历所有锁,并一一释放,我们也使用它来检查该互斥体上是否有锁,但不幸bionic libc
的是pthread_mutex_t
struct 只有一个成员value
任何人都知道如何解决这个?
docker - 尝试在 Linux Ubuntu 18.04 Bionic 上安装 Docker CE 时显示错误?
阅读包裹清单...完成
构建依赖树
读取状态信息...完成
将安装以下新软件包:
码头工人-ce
0 升级,1 新安装,0 删除,0 未升级。
需要得到0 B/33
,8 MB
的档案。
此操作后,181 MB
将使用额外的磁盘空间。(
android - Android Bionic 中的哪些功能授予对硬件(相机、麦克风等)的访问权限?
我正在编写一个代码,该代码需要更改 Bionic 中访问相机、麦克风、位置、联系人等资源的功能(用于学术研究目的)。
我很难找到这些功能,因为几乎没有任何在线文档。
谁能提供有关这些功能的名称/位置的信息?
amazon-web-services - 无法 RDP 到 Amazon EC2 实例(Windows 服务器)
启动 windows 2016、Amazon EC2 实例后,
我收到ec2-18-221-95-56.us-east-2.compute.amazonaws.com.rdp
了连接到 Windows 实例的文件。
在我的 ubuntu 笔记本电脑上,单击 .rdp 文件,我在提供密码后收到以下消息:
Ubuntu 仿生笔记本电脑:
运行以下命令,以解决此问题(不走运):
如何解决这个问题?