请看这个例子及其反汇编代码:
程序代码:
#include <stdio.h>
void a(char* p)
{
printf("%s\n",p);
}
int main(void)
{
a("This is a test text.");
return 0;
}
反汇编后代码:
程序代码:
00401000 >/$ 55 PUSH EBP
00401001 |. 8BEC MOV EBP,ESP
00401003 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00401006 |. 50 PUSH EAX ; /<%s>
00401007 |. 68 EC204000 PUSH w5.004020EC ; |format = "%s\n"
0040100C |. FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR100.printf>] ; \printf
00401012 |. 83C4 08 ADD ESP,8
00401015 |. 5D POP EBP
00401016 \. C3 RETN
00401020 >/$ 55 PUSH EBP
00401021 |. 8BEC MOV EBP,ESP
00401023 |. 68 F0204000 PUSH w5.004020F0 ; /Arg1 = 004020F0 ASCII "This is a test text."
00401028 |. E8 D3FFFFFF CALL w5.a ; \a
0040102D |. 83C4 04 ADD ESP,4
00401030 |. 33C0 XOR EAX,EAX
00401032 |. 5D POP EBP
00401033 \. C3 RETN
请注意这行:
00401023 |. 68 F0204000 PUSH w5.004020F0 ; /Arg1 = 004020F0 ASCII "This is a test text."
这里直接push的就是字符串的首地址 也就是所谓的指针 对应源代码
a("This is a test text.");
[
本帖最后由 wp231957 于 2014-7-28 13:59 编辑 ]