我刚刚开始学习逆向工程(自学)。我知道组装到一些可以理解的程度。反汇编 C 代码后弹出的基本指令对我来说几乎是可以理解的(比如每条指令的含义)。既然开始了,有人可能会觉得这些问题很愚蠢,请推荐一些关于倒车基础知识的好电子书,这样我就可以停止问菜鸟问题了。好吧,查询是:- 这是一个简单的 C 代码
#include<stdio.h>
int main(void)
{
printf("hello world");
}
然后是main的反汇编代码。
0x004013b0 <+0>: push %ebp //saves ebp to stack
0x004013b1 <+1>: mov %esp,%ebp //saves esp onto ebp
0x004013b3 <+3>: and $0xfffffff0,%esp //alignong the stack
0x004013b6 <+6>: sub $0x10,%esp //creating 16 bytes on stack
0x004013b9 <+9>: call 0x401980 <__main> //main call
0x004013be <+14>: movl $0x403064,(%esp) ?? what is it exactly doing??
0x004013c5 <+21>: call 0x401bf0 <printf> //print call
0x004013ca <+26>: leave
0x004013cb <+27>: ret
在这里我无法理解它在做什么(尽管 0x403064 中的内容似乎被复制到 esp 的堆栈中)- movl $0x403064,(%esp)
在这个汇编代码中,我需要知道“hello world”存储在哪里?另外,如果有人可以建议我一些好的阅读材料,以便从基础学习逆向。提前致谢。