所以我正在分解一些代码(二进制炸弹实验室)并需要一些帮助来弄清楚发生了什么。
这是艾达的屏幕截图:
(下面有一些跳台上的东西和另一个比较,但我觉得这些东西更舒服一些(我想)
现在,我想我知道这一阶段发生了什么,正如我读到的:
http://teamterradactyl.blogspot.com/2007/10/binary-bomb.html(向下滚动至第3阶段)
但是,我习惯了不同形式的程序集。
我最不明白的是上面这些Var28=DwordPTR-28h的东西。
当sscanf被调用时,它如何知道将每个令牌放在哪里?只有三个标记(上面的链接就是这么说的,尽管我看到了%d、%d。。。也许是两个,我想是三个)。基本上,有人能告诉我在调用sscanf之后,这些var_x(和arg_0)将指向什么吗?
它们只是相对于堆栈指针的地址,对吧。。。?但是这些地址是如何被sscanf的令牌填满的呢?
注:这是作业,但上面写着不要加作业标签,因为它已经过时了。作业是找出要通过命令行输入的秘密短语,以通过每个阶段。
注2:我真的不知道如何使用IDA,我的朋友刚刚告诉我打开IDA中的炸弹文件。也许有一个简单的方法可以让我在艾达身上进行实验并找出答案,但我不知道怎么做。

最佳答案

局部变量存储在帧指针的正下方。参数位于帧指针上方。x86使用BP/EBP/RBP作为帧指针。
天真的反汇编只会把lea eax, [ebp+var_10]反汇编为lea eax, [ebp-10h]。此指令正在引用一个局部变量,该变量的地址是帧指针指向的下面10小时(16字节)。LEA意味着加载有效地址:它正在加载[ebp - 10h]eax处的变量地址,因此eax现在包含指向该变量的指针。
显然,IDA试图给局部变量赋予有意义的名称,但由于显然没有可用的调试信息,它最终使用了伪名称。无论如何:

var_10= dword ptr -10h

只是IDA告诉我们它为var_10创建了一个别名。

关于c - 了解反汇编的C代码(尤其是类似var_28 = dword ptr -28h之类的东西)(二进制炸弹实验室),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12466589/

10-12 14:50