我用C++写了一个小程序。我将"反汇编"窗口与C++程序窗口并排。 我想看看当我在即时窗口中执行程序集指令时,在程序集级别会发生什么。但是,我不能这样做。 例如,当我在即时窗口中键入"add eax, 1"时,我得到的结果是"标识符"添加"未定义"。
有没有办法执行汇编指令,以便我能够在调试时执行"添加 eax, 1"之类的操作?我想这样做,以便我可以更好地了解程序集级别正在发生的事情。 任何帮助都非常感谢。
我研究了很多互联网,但找不到我的问题的解决方案。
C++代码:
#include<iostream>
using namespace std;
int AddMe(int a, int b)
{
int c;
c = a + b;
return c;
}
int main()
{
AddMe(10, 20);
return 0;
}
等效汇编代码的代码片段:
int main()
{
00BCDC40 push ebp
00BCDC41 mov ebp,esp
00BCDC43 sub esp,0C0h
00BCDC49 push ebx
00BCDC4A push esi
00BCDC4B push edi
00BCDC4C lea edi,[ebp-0C0h]
00BCDC52 mov ecx,30h
程序集监视窗口:
+ (int*)(ebp) 0x001ef898 {2029812} int *
+ (int*)(esp) 0x001ef878 {2029720} int *
+ (int*)(esi) 0x00bc1712 {TryCatch2.exe!_mainCRTStartup} {9030121} int *
+ (int*)(edi) 0x00bc1712 {TryCatch2.exe!_mainCRTStartup} {9030121} int *
+ (int*)ecx 0x00000001 {???} int *
+ (int*)(ecx) 0x00000001 {???} int *
+ (int*)(eax) 0x00615180 {6377864} int *
+ (int*)(edx) 0x00614fe8 {6377728} int *
+ (int*)(esi) 0x00bc1712 {TryCatch2.exe!_mainCRTStartup} {9030121} int *
+ (int*)(ebx) 0x002e7000 {67174400} int *
实际结果: 当我在即时窗口中键入"添加 eax,1"时,它给出的结果是"标识符"添加"未定义"。 预期成果: 当我在即时窗口中键入"添加 eax, 1"时,它应该将 1 添加到 eax 寄存器。
我们无法更改即时窗口中的寄存器值。但是,我们可以在寄存器窗口和监视窗口中更改寄存器值(只需编辑寄存器值(。