函数很简单
int sum(int x,int y){
return x+y;
}
int _tmain(int argc, _TCHAR* argv[])
{
int xx=sum(3,4);
....//省略后面的
}
直接上VS转化出来的汇编代码
//sum函数部分。。。。
int sum (int x,int y){
004113B0 push ebp //保存调用前的堆栈基址
004113B1 mov ebp,esp //赋值(保存)当前的栈基地址
004113B3 sub esp,0C0h //将栈地址向后跳了192个字节,不知道干什么。。。因为栈是从高地址向地址发展的
004113B9 push ebx //不知道
004113BA push esi
004113BB push edi
004113BC lea edi,[ebp-0C0h]
004113C2 mov ecx,30h
004113C7 mov eax,0CCCCCCCCh
004113CC rep stos dword ptr es:[edi]
return x+y;
004113CE mov eax,dword ptr [x] //保存当前x的值到eax
004113D1 add eax,dword ptr [y] //这里就是x+y的操作啦,没什么好看的
}
004113D4 pop edi //下面3句是把栈里的那3个之前push进去的都pop出来
004113D5 pop esi
004113D6 pop ebx
004113D7 mov esp,ebp //还原原来堆栈指针
004113D9 pop ebp //重新定位程序基地址
004113DA ret //返回指令
--- No source file -------------------------------------------------------------
主函数部分
--- c:/documents and settings/guoge/my documents/visual studio 2005/projects/ckrfile/testdllmain/testdllmain.cpp
int _tmain(int argc, _TCHAR* argv[])
{
004113F0 push ebp
004113F1 mov ebp,esp
004113F3 sub esp,144h
004113F9 push ebx
004113FA push esi
004113FB push edi
004113FC lea edi,[ebp-144h]
00411402 mov ecx,51h
00411407 mov eax,0CCCCCCCCh
0041140C rep stos dword ptr es:[edi]
int xx=sum(3,4);
0041140E push 4 //push数据4
00411410 push 3 //push数据3
00411412 call sum (41105Fh) //调用子程序计算
00411417 add esp,8 //维护堆栈平衡,因为之前push了2个int值,占8字节,这里esp+8就是将通知栈指针回收栈空间8字节的意思
0041141A mov dword ptr [xx],eax //赋值计算结果给ptr[xx],注意,这里说明了函数返回值是保存在eax寄存器中的,毕竟返回值(不管是指针还是数值)的只有一个。
char *str = "sdfsdf";
肚子饿了,先到这里,里面很多不知道什么意思,等回去求教高人去,回来再补充