![]() |
#2
wp2319572014-07-28 13:56
请看这个例子及其反汇编代码:
![]() #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 编辑 ] |
各位大哥大姐,小弟刚学c++到类,书中有个小程序小弟没看明白呀,还请指教:
其他不重要的就不写了,就写不明白的语句哈。
viod Ccar :: SetModel (char *model) //Ccar是用class定义的一个类的名字。
{
strcpy(m_model, model); //m_model Ccar中的成员变量且私有的。
}
主函数中有如下语句: Ccar mycar, yourcar;
mycar.SetModel("santana 2000");
//小弟主要不明白的就是倒数上去的第一条语句和第三条语句。mycar.SetModel("santana 2000"); 这条语句是直接一字符串当成参数传了过去,但是函数那边的形参是指针类型的啊?传的地址?好像传地址不是这样的啊?传的字符串?好像也不对呀?并且函数体里复制的直接是形参名字。这是什么意思啊?