【发布时间】:2011-05-13 20:38:15
【问题描述】:
我希望strcmp函数的调用返回0,这意味着
int strncmp(const char *s1, const char *s2, size_t n);
const char *s1 和 const char *s2 应该包含相同的字符串。如果s2 指向字符串“hello”并且n 是4,我怎样才能将一个与hello 对应的十进制值传递给s1?
8049e87: c7 44 24 08 04 00 00 movl $0x4,0x8(%esp) // 4
8049e8e: 00
8049e8f: c7 44 24 04 80 bd 04 movl $0x804bd80,0x4(%esp) // the constant is "hello"
8049e96: 08
8049e97: 89 04 24 mov %eax,(%esp) // The contents of %eax are a decimal (%d)
8049e9a: e8 61 ec ff ff call 8048b00 <strncmp@plt>
8049e9f: 85 c0 test %eax,%eax // I want this to be 0!
我尝试在 ASCII 中传递“h”的十进制值,它似乎是正确的方向,但不完全。
【问题讨论】:
-
eax需要包含字符串的地址,而不是“十进制”值 -
按照这个思路,我尝试传入 0x804bd80 的十进制值(这样地址应该相同)——为什么不行?
-
我不确定对“十进制”值的痴迷是什么 - 只需将
0x804bd80放入 eax 中,然后 s1 和 s2 都应该指向同一个字符串。 -
上一步试图确保 %eax 通过 sscanf "%d" 查询,所以我认为它必须是 %d。我已将该行添加到代码中。
-
在进行汇编之前,您需要学习使用高级语言进行编程