|
#include "iostream.h"
#include "stdio.h"
extern "C" __declspec(dllexport) int __cdecl Sumcdecl(int a, int b, int c)
{
// 声明局部变量
int i = 1000;
short j = 2000;
int k = 3000;
int rEBP = 0;
int value = 0;
// 显示局部变量的地址
cout << "局部变量的地址:" << endl;
cout << &value << " <-----------value" << endl;
cout << &rEBP << " <-----------rEBP" << endl;
cout << &k << " <-----------k" << endl;
cout << &j << " <-----------j" << endl;
cout << &i << " <-----------i" << endl;
// 显示寄存器的值
cout << "寄存器:" << endl;
__asm mov rEBP, ebp;
printf("0x%08X <-----------EBP\n", rEBP);
// 显示函数参数的地址
cout << "函数参数的地址:" << endl;
cout << &a << " <-----------a" << endl;
cout << &b << " <-----------b" << endl;
cout << &c << " <-----------c" << endl;
// 通过 EBP 寄存器获得堆栈中的数据并显示
cout << "通过EBP获取堆栈中的数据:" << endl;
__asm mov eax, [ebp - 4];
__asm mov value, eax;
cout << "i: " << value << endl;
__asm mov eax, [ebp - 8];
__asm mov value, eax;
cout << "j: " << (short)value << endl;
__asm mov eax, [ebp - 12];
__asm mov value, eax;
cout << "k: " << value << endl;
__asm mov eax, [ebp + 8];
__asm mov value, eax;
cout << "a: " << value << endl;
__asm mov eax, [ebp + 12];
__asm mov value, eax;
cout << "b: " << value << endl;
__asm mov eax, [ebp + 16];
__asm mov value, eax;
cout << "c: " << value << endl;
// 返回
return (a + b + c);
}
// 主函数
int main(int argc, char* argv[])
{
Sumcdecl(10, 20, 30);
return 0;
}
|