| #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; } |