我用C++写了一个小程序,将反汇编窗口和C++程序窗口并排放置。
我想在立即窗口执行汇编指令时查看在汇编级别上发生的情况。但是,我无法这样做。
例如,当我在立即窗口中键入“add eax, 1”时,我会得到“标识符“add”未定义”的结果。
有没有一种方法可以执行汇编指令,以便我能够像调试时那样执行“add eax, 1”之类的操作?我想这样做是为了更好地了解在汇编级别上发生的情况。 非常感谢任何帮助。
我在网上进行了很多研究,但找不到解决方案。
C++代码:
实际结果: 当我在立即窗口中键入“add eax, 1”时,它会给出结果“标识符“add”未定义”。
期望结果: 当我在立即窗口中键入“add eax, 1”时,它应该将 1 添加到 eax 寄存器。
有没有一种方法可以执行汇编指令,以便我能够像调试时那样执行“add 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 *
实际结果: 当我在立即窗口中键入“add eax, 1”时,它会给出结果“标识符“add”未定义”。
期望结果: 当我在立即窗口中键入“add eax, 1”时,它应该将 1 添加到 eax 寄存器。
add ax,1
,然后它将被汇编并写入到你指定的内存中,然后你可以使用调试器来执行它。但这不像在评估/立即窗口中评估指令,你实际上是在某个内存/上下文中执行它。随着现代操作系统的发展,这变得更加复杂,因为内存的可执行区域通常是只读的(除非调试器重新配置它以进行修改,然后再改回来),这取决于你使用的工具。 - Ped7g