winapi - 在 .code 之外调用汇编函数
问题描述
我尝试运行下面的简单代码:
extrn MessageBoxA: PROC
extrn ExitProcess: PROC
.data
titles db 'Win64', 0
msg db 'Hello World!', 0
.code
main proc
sub rsp, 28h ; 32 byte for 4 arguments, 8 byte for 'call' it self
mov rcx, 0 ; hWnd = HWND_DESKTOP
lea rdx, msg ; LPCSTR lpText
lea r8, titles ; LPCSTR lpCaption
mov r9d, 0 ; uType = MB_OK
call MessageBoxA
mov ecx, eax
add rsp, 28h
main endp
End
当我将它移动到一个函数时,代码不再起作用:
extrn MessageBoxA: PROC
extrn ExitProcess: PROC
.data
titles db 'Win64', 0
msg db 'Hello World!', 0
msgbox_ready:
sub rsp, 28h ; 32 byte for 4 arguments, 8 byte for 'call' it self
mov rcx, 0 ; hWnd = HWND_DESKTOP
lea rdx, msg ; LPCSTR lpText
lea r8, titles ; LPCSTR lpCaption
mov r9d, 0 ; uType = MB_OK
call MessageBoxA
mov ecx, eax
add rsp, 28h
.code
main proc
call msgbox_ready
main endp
End
如果我将内容移动msgbox_ready
到功能main
上,它似乎没问题。问题是什么?可能是因为它在.code
部分之外吗?
解决方案
我使用jmp msgbox_ready
代替解决了问题,call msgbox_ready
并且该功能工作正常。阅读汇编'call'与'jmp'
推荐阅读
- ethereum - SimpleAirdrop 合约部署问题,即使编译也能正常工作
- c# - .NET Core API - 字段列表中的未知列
- c# - ASP.NET Core 5 & Entity Framework:基于约定的导航问题
- sql - 使用 SSIS 在两个不同的服务器之间传输数据
- networking - 如何在 Rust 中重新组装 IP 分段的 UDP 数据包?
- laravel - 如何在开发服务器上更改基本 url 水平 laravel
- java - Student 类型不是有界参数的有效替代品
> 类型的 InsertionSort - python - Python Plotly:文本未出现在饼图的所有部分
- sql - 从客户订单表中查找最近的重复订单 - 慢速交叉应用
- reactjs - 如何添加缺少的模块“./lib/constants”?