原程序文件
#include <stdio.h>
int main(void)
{
int a;
int b;
int c;
a = 10;
b = 20;
c = a + b;
printf("%d\n", c);
getchar();
return 0;
}
使用反汇编观察
#include <stdio.h>
int main(void)
{
01321810 push ebp
01321811 mov ebp,esp
01321813 sub esp,0E4h
01321819 push ebx
0132181A push esi
0132181B push edi
0132181C lea edi,[ebp-0E4h]
01321822 mov ecx,39h
01321827 mov eax,0CCCCCCCCh
0132182C rep stos dword ptr es:[edi]
0132182E mov ecx,offset _F2A6C2CF_test@cpp (0132C003h)
01321833 call @__CheckForDebuggerJustMyCode@4 (01321212h)
int a;
int b;
int c;
a = 10;
01321838 mov dword ptr [a],0Ah //0A是十六进制,转为十进制是10,就是将10赋值给a
b = 20;
0132183F mov dword ptr [b],14h
c = a + b;
01321846 mov eax,dword ptr [a] //eax是寄存器,将a移动到寄存器中
01321849 add eax,dword ptr [b] //将b的值加到寄存其中
0132184C mov dword ptr [c],eax //将寄存器的值移动到c中
printf("%d\n", c);
0132184F mov eax,dword ptr [c]
01321852 push eax
01321853 push offset string "%d\n" (01327B30h)
01321858 call _printf (0132104Bh)
0132185D add esp,8
getchar();
01321860 mov esi,esp
01321862 call dword ptr [__imp__getchar (0132B16Ch)]
01321868 cmp esi,esp
0132186A call __RTC_CheckEsp (0132121Ch)
return 0;
0132186F xor eax,eax
}
在clang中添加汇编语言__asm
#include <stdio.h>
#include <Windows.h>
int main02(void)
{
int a;
int b;
int c;
//a = 10;
//b = 20;
//c = a + b;
//汇编代码
__asm
{
mov a, 3
mov b, 4
mov eax, a
add eax, b
mov c, eax
}
printf("a=%d\n", a);
printf("b=%d\n", b);
printf("c=%d\n", c);
getchar();
//WinExec
return 0;
}