linux – 程序集子程序被调用两次,甚至没有从main调用

linux – 程序集子程序被调用两次,甚至没有从main调用,第1张

概述我正在尝试定义一些在其中调用printf的子例程. 一个非常简单的例子如下: extern printfLINUX equ 80HEXIT equ 60section .data intfmt: db "%ld", 10, 0segment .text global mainmain: call os_retu 我正在尝试定义一些在其中调用printf的子例程.
一个非常简单的例子如下:

extern printfliNUX        equ     80HEXIT         equ     60section .data    intfmt: db "%ld",10,0segment .text    global  mainmain:    call os_return      ; return to operating systemos_return:    mov  rax,EXIT      ; linux system call 60 i.e. exit ()    mov  rdi,0     ; Error code 0 i.e. no errors    int  liNUX      ; Interrupt linux kerneltest:    push rdi    push rsi    mov rsi,10    mov rdi,intfmt    xor rax,rax    call printf    pop rdi    pop rsi    ret

这里测试只是调用printf,将数字10输出到屏幕.我不希望这个被调用,因为我没有打电话给它.

但是在编译和运行时:

nasm -f elf64 test.asmgcc -m64 -o test test.o

我得到输出:

1010

我完全感到困惑,并想知道是否有人可以解释为什么会这样?

解决方法 int 80H调用32位系统调用接口,a)使用32位系统调用号,b)用于32位代码,而不是64位代码.您的代码实际上是使用随机参数执行umask系统调用.

对于64位系统调用,请使用syscall指令:

...os_return:    mov  rax,0     ; Error code 0 i.e. no errors    syscall         ; Interrupt linux kernel...
总结

以上是内存溢出为你收集整理的linux – 程序集子程序被调用两次,甚至没有从main调用全部内容,希望文章能够帮你解决linux – 程序集子程序被调用两次,甚至没有从main调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1025638.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存