我试图找到我的原生Android库的代码在进程的地址空间中占用的地址范围。我正在阅读和解析/proc/self/maps
。图书馆有两部分。一个是代码,另一个是数据,我猜。我需要将他们分开。然而,它们之间的区别是,有点环境。在Android 2.3.3上测试。好的方法来识别/ proc/*/maps中的代码段
代码段的权限是r-xp,数据是rwxp - 两者都是可执行的。基于可写性的决定,我感到不自在 - 如果在同样的Android版本中,只读数据部分会怎么样?
另一个区别是映射部分相对于文件的偏移量 - 代码段的偏移量为0.再次,如果链接器的某些迭代将数据放在代码之前会怎么样?
与GDB和Android的stack walker一样,这些工具告诉我代码地址属于哪个模块,它在库中的偏移量没有问题。只是在说'。
编辑:在Android 4.0上,部分是不同的:有r-xp,r-p,rw-p。因此,我可以轻松识别可执行部分的故障诊断 - 但早期的Android会怎么样?
我的代码和数据都没有可执行标志。 – auselen 2013-02-28 14:45:43
可能不同的Android版本... – 2013-02-28 16:07:07
我认为检查'x'标志是公平的。 – auselen 2013-03-01 12:03:37