c - 将汇编翻译成 C 程序

标签 c assembly binary gdb hex

这是我正在查看的汇编代码:

push   %ebp
mov    %esp, %epb
sub    $0x18, %esp
movl   $0x804a170, 0x4(%esp)
mov    0x8(%ebp), %eax
mov    %eax, (%esp)
call   0x8048f9b <strings_not_equal>
test   %eax, %eax
je     0x8048f78 <phase_1+34>
call   0x8049198 <failed>
leave
ret

目标是为程序集函数提供正确的输入以跳转到函数phase_1+34。 .到目前为止,这是我正在解释的内容:

前两行是函数的设置代码。第一个 'sub' 行通过向下移动 '%esp' 来分配空间以存储调用 strings_not_equal 的参数。功能。我认为这两个参数被传递给 strings_not_equal0x804a170和输入值。我假设 <strings_not_equal>如果传递的字符串 相等,将返回 0。 je然后检查是否 %eax & %eax为零,只有在 %eax = 0 时才会发生.所以基本上,似乎输入字符串必须等于 0x804a170 .

到目前为止,有人发现任何缺陷吗?

在这一点上,我卡住了,我尝试过的方法不起作用。 0x804a170十进制是 134521200。但是传递给它的函数需要 strings。所以0x804a170应该转换成字符串?那个字符串是输入应该等于什么?

我不知道。如果有人发现任何缺陷或可以给我指点,我们将不胜感激!

最佳答案

0x804a170 是指向被运行时认为是“字符串”的东西的指针。由于您没有提供有关它是什么的信息,我们只能猜测它是指向第一个字符的指针,后跟更多字符并以 0 结尾,或者它是指向第一个字符的指针,并且前面的 1/2/4/8 字节将长度描述为整数。

它本身不是一个字符串。

关于c - 将汇编翻译成 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33623004/

相关文章:

c - Linux内核中奇怪的死锁

c - 使用设备树引导主线 Linux 内核

c++ - C++中的指针与汇编语言中的指针之间的区别?

random - 在python中生成随机二进制数

java - 使用java解码二进制消息

c++ - 有没有办法查看 C/C++ 存档 (.a) 中的函数?

c - 存储分隔的字符串

assembly - 测试 xmm/ymm 寄存器是否为零的更快方法?

linux - 在汇编程序中编写 linux 内核模块时的内存访问

c - C语言编程中的函数