nasm汇编 linux和macos int 80h调用系统函数的参数传递
linux和macos的汇编中通过 int 80h 软中断来调用系统函数,但是给函数传入的参数方法不同。以下说明32位程序的调用方式。
Linux
对于linux,如果我要调用如下的C语言函数:
sys_write(unsigned int fd, const char * buf, size_t count);
函数参数和寄存器对应关系为:
ebx: fd
ecx: buf
edx: count
然后函数编号对应寄存器 eax, 函数编号对照表可以参考https://blog.csdn.net/xiaominthere/article/details/17287965
所以汇编中调用sys_write这个函数来显示一个字符串对应的汇编如下:
section .data
msg db 'Hello'
section .text
__display:
mov edx, 5 ;字符串长度, 对应count参数
mov cdx, msg ;字符串所在地址, 对应buf参数
mov ebx, 1 ;对应fd参数,fd为1时表示stdout, 显示屏
mov eax, 4 ;对应sys_write在linux系统中调用好为4
int 80h
macOS
在macos中,C语言函数的参数不使用寄存器来存放,而是使用stack来存放,参数顺序倒序入栈,总共支持16字节。比如同样的显示字符串功能,在macos中的C函数为:
write(int fd, user_addr_t cbuf, user_size_t nbyte);
因此,函数参数入栈顺序为:
push nbyte
push cbuf
push fd
sub esp 4 ;参数总共要占用16字节,因为这个函数需要3个参数,所以实际占用了 3*4=12个字节,为了填满16字节,这里将stack地址再减去4个字节(stack在内存中由高到底存放,所以是减去)
然后函数编号对应寄存器 eax, 函数编号对照表可以参考https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master
所以汇编中调用write这个函数来显示一个字符串对应的汇编如下:
section .data
msg db 'Hello'
section .text
__display:
push dword 5 ;字符串长度, 对应nbyte参数
push dword msg ;字符串所在地址, 对应cbuf参数
push dword 1 ;对应fd参数,fd为1时表示stdout, 显示屏
sub esp, 4 ;填满16字节
mov eax, 4 ;对应sys_write在macos系统中调用好为4
int 80h
无论在linux还是macos中,函数的返回值都最后保存在eax寄存器中。
参考:
linux调用方式: https://blog.csdn.net/xiaominthere/article/details/17287965
macos调用方式: https://filippo.io/making-system-calls-from-assembly-in-mac-os-x/
《为家而战》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/14939.html
《甜甜的陷阱》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/12598.html
《甜甜的陷阱》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/12598.html
《作案动机第三季》欧美剧高清在线免费观看:https://www.jgz518.com/xingkong/163583.html
新车首发,新的一年,只带想赚米的人
新盘 上车集合 留下 我要发发 立马进裙
新车首发,新的一年,只带想赚米的人coinsrore.com
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
华纳企业开户所需材料?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服电话是多少?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠开户专线联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
如何联系华纳东方明珠客服?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠官方客服联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服热线?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠开户客服电话?(▲182(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠24小时客服电话?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服邮箱?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠官方客服在线咨询?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服微信?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳圣淘沙开户步骤详解(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程全解析(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司账户注册指南(183-8890-9465—?薇-STS5099【6011643】
新手如何开通华纳圣淘沙公司账户(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙企业开户标准流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户:从零到一(183-8890-9465—?薇-STS5099【6011643】
官方指南:华纳圣淘沙公司开户流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程说明书(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司快速开户通道(183-8890-9465—?薇-STS5099【6011643】
三分钟搞定华纳圣淘沙公司开户
(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司极速开户攻略(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙开户流程提速秘籍(183-8890-9465—?薇-STS5099【6011643】
如何快速完成华纳圣淘沙公司注册(183-8890-9465—?薇-STS5099【6011643】