ASM 中的 Printf 或 MessageBox 用于调试

Printf or MessageBox in ASM for debugging

提问人:javierMarquez 提问时间:11/30/2022 最后编辑:javierMarquez 更新时间:11/30/2022 访问量:63

问:

我尝试在 x32dbg 中调试 MFC 程序如何使用 IO 端口,我想在从函数返回之前在 in/out 程序集命令后添加 printf 或 MessageBoxA 并显示一些值。当我把printf:

push eax //eax contains the value
call printf
add esp,4
ret

我遇到异常C0000005 EXCEPTION_ACCESS_VIOLATION

如果我使用 MessagrBoxA:

push 0 //OK
push eax // eax contains the value
push eax
push 0 // HWND
call dword ptr ds:[54352C] // linked user32.MessageBoxA
ret

我在 MessageBoxA 中得到了相同的异常。为什么会这样?如何以另一种方式输出一些值?

更新

如果我在这里使用 putchar:

push eax
call putchar
add esp,4
ret

我一无所获,因为我没有在我的应用程序中初始化控制台。是否可以在 ASM 中初始化它并与主应用程序并行运行控制台?

程序集 x86 windows-xp x64dbg

评论

3赞 Jester 11/30/2022
你知道这需要一个格式字符串,对吧?同样,采用字符串而不是数值。printfMessageBox
2赞 Jester 11/30/2022
是的,您可以使用 AllocConsole 至于 C stdio 是否会自动附加到它,我不知道。

答: 暂无答案