
逆向
文章平均质量分 67
TangGeeA
这个作者很懒,什么都没留下…
展开
-
Android连接器(二)-elf文件的加载
VerifyElfHeaderelf加载过程其实最主要的部分就是创建程序的段ElfReader::ElfReader(const char* name, int fd, off64_t file_offset, off64_t file_size) : name_(name), fd_(fd), file_offset_(file_offset), file_size_(file_size), phdr_num_(0), phdr_mmap_(nu原创 2022-05-06 10:44:27 · 842 阅读 · 0 评论 -
Android连接器(一)-elf文件格式总结
elf包含两种视图,分别是文件视图和程序视图描述文件视图的主要数据结构就是section,一个elf文件包含多个section,每个section是相对独立的数据。文件使用Section Headers来描述section的名称类型以及位置大小。描述程序的视图为程序头表和程序头。链接器会根据程序头表来对数据进行加载。程序头表中存放多个程序头,程序头描述的是程序段。程序段并不在elf中,需要链接器进行内存分配,并将elf文件中的不同部分映射到分配的段内存上。一个程序段版本多个具有相同属性(读写执行权限一原创 2022-05-06 10:39:05 · 872 阅读 · 0 评论 -
arm异常处理unwind 过程
backtrace:#00 pc 00062928 /data/app/com.ss.android.article.news-1/lib/arm/libuserinfo.so (_Unwind_VRS_Pop+84)#01 pc 00062f64 /data/app/com.ss.android.article.news-1/lib/arm/libuserinfo.so (__gnu_unwind_execute+240)#02 pc 00063230 /data/app/com.ss.androi原创 2021-07-10 18:23:52 · 1386 阅读 · 2 评论 -
arm32 stack check
arm64 反汇编分析分析了armv8的stack check原理, 这里分析下arm32的原理基本流程和arm64一致,我们看下arm32如何保存canary值, __set_tlsENTRY(__set_tls) mov ip, r7 ldr r7, =__ARM_NR_set_tls swi #0 mov r7, ip cmn r0, #(MAX_ERRNO + 1) bxls lr neg r0, r0 b __set_errno_internalEND(__原创 2020-07-04 09:43:26 · 458 阅读 · 0 评论 -
ida使用技巧
注意一定要选对调试器版本,比如armeabi-v7a 和armeabi都是32位的库,如果使用64位调试器,下断点的时候调试器就会报告内存错误Error: Oops! internal error 30066 occured.不能识别代码: 有时候代码被识别成数据,我们可以通过如下命令来转换P键:将光标指定的位置处的数据解释成函数。C键:将光标指定位置处的数据解释成指令。D键:将光标指定位置处的数据解释成数据。g键:调转到指定地址ctrl+s :选中库ALT+g: 选择指定的模式:如thum原创 2020-07-04 09:38:13 · 1307 阅读 · 1 评论 -
Android 动态链接器-ELF文件的加载
VerifyElfHeaderelf加载过程其实最主要的部分就是创建程序的段:ElfReader::ElfReader(const char* name, int fd, off64_t file_offset, off64_t file_size) : name_(name), fd_(fd), file_offset_(file_offset), file_size_(file_s...原创 2020-04-06 09:27:05 · 1101 阅读 · 0 评论 -
android 链接器分析
我们已经知道,exec系统调用后,操作系统解析完成elf文件后,将控制权交给链接器的_start执行,下面以x86平台进行分析bionic/linker/arch/x86/begin.c__LIBC_HIDDEN__ void _start() { void (*start)(void); void* raw_args = (void*) ((uintptr_t) __built...原创 2019-02-16 14:04:16 · 997 阅读 · 0 评论 -
ELF文件分析
背景 一个程序要想运行,首先要加载到内存中,程序的pc指针指向内存中的代码,代码在执行的时候会在使用内存中的数据。这些数据可以分为两类:静态数据。动态数据。什么是动态数据呢,动态数据在程序运行过程中在堆或者栈上分配内存。而静态数据则不然,静态数据在代码编译完成后,就应该确定使用的地址和空间。静...原创 2020-04-04 10:31:53 · 1087 阅读 · 0 评论