【背景】
近日处理现场问题时遇到了踩内存导致的崩溃问题,然而个人对反汇编程序执行过程不熟悉,通过查阅资料,对比分析两个小demo理解汇编代码踩内存的分析。
【基础】
对于反汇编过程,首先需要理解的是寄存器。以64位寄存器rax为例,其中0到31就是平常分析32位程序是常见的eax,0到15则是ax,而ah和al则分别是8到15和0到7。其中rax常用来做存储返回值的寄存器,rdi,rsi,rdx,rcx,r8,r9常用作函数的参数传递寄存器,分别对应函数的第1~6个参数,rbp、rsp、rip分别对应栈基、栈顶、指向当前栈帧中执行的指令。函数的入参顺序这里不做说明,感兴趣可以了解__stdcall、__fastcall。
![](https://img-blog.csdnimg.cn/img_convert/3fe49eb67d104749f32e924e364be479.png)
对于寻址问题,这里列出几种寻址方式,具体可查阅相关资料。
![](https://img-blog.csdnimg.cn/img_convert/f1f3fda8fffcada1a94bdc877fdb2f14.png)
![](https://img-blog.csdnimg.cn/img_convert/ebb747dc2e2f6c80e0070a80d17da9a4.png)
【问题解析】
![](https://img-blog.csdnimg.cn/img_convert/0fefe72b91e618dba8db547881f108c0.png)
这里写了一个demo,先分析该demo的Begin函数的调用堆栈,如下图所示
![](https://img-blog.csdnimg.cn/img_convert/080d79dcd67253f4838f6dd4f75b93c7.png)
函数在栈中内存分布大致分为四个部分:
参数空间
Call指令执行完的下一条指令地址
前EBP的值(当前EBP中保存)
局部变量空间
注意:对于__security_cookie取决于编译器
___security_cookie机制,防止栈溢出___security_cookie机制,防止栈溢出 - mavaL - 博客园
先分析正常函数的例子:
![](https://img-blog.csdnimg.cn/img_convert/c9b20139495cd3bd79e79ce56b189b7c.png)
![](https://img-blog.csdnimg.cn/img_convert/54249efa6bc9aac499cdab9d6d051af5.png)
Begin函数的ebp地址为0xC8,存储main函数ebp,向下偏移4个字节为_security_cookies,向下偏移8个字节为数组地址,这里注意数组大小为6,为了内存对齐分配8个字节,向下偏移4个字节为result(int),向下偏移4个字节为数组首地址(MemCpy的参数),再向下偏移4字节地址为call下一条指令的地址,再向下4个字节为MemCpy函数的ebp
当我们修改memcpy函数将hello word!!!!(截图有误)写进大于dst空间的内存,运行马上崩溃。
![](https://img-blog.csdnimg.cn/img_convert/8a07f5863e27d2f1acf92ba56fdb8902.png)
![](https://img-blog.csdnimg.cn/img_convert/602f9fbc7513356f8c7e00139899e3c5.png)
![](https://img-blog.csdnimg.cn/img_convert/1fb5f44b8c0d7f00dac42556c50ffa16.png)
![](https://img-blog.csdnimg.cn/img_convert/83f079acb6bf2292c4b2626e32278fa6.png)
分析此时的栈内存,这里看到函数Begin函数的ebp 0x0137fa5c 所存储的数据(0x0137fa50,实际为main函数的地址)被修改为(0x01000000)
【分析工具】
踩内存问题被发现,通常是程序崩溃的时候,能够生成coredump分析,知道是哪个内存被踩了,但通常是很难分析出是哪段代码出现了踩内存的问题,也就是内存践踏的第一现场,我们只能借助工具排查。
对于简单的容易发现内存被篡改的可以使用VS自带数据断点和Gdb watch,对于复杂问题可参考Mprotect、Asan、Perf(hardware breakpoint)、Valgrind、Magic number等工具。
https://blog.csdn.net/zz460833359/article/details/121769216