Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
331 views
in Technique[技术] by (71.8m points)

assembly - How to direct fputs to stdout in x86 on MacOS

I cannot figure out how to call fputs from x86 in macOS and direct it to stdout, I think the problem is how to reference stdout as a file pointer to pass to fputs. However, I am able to get fputs to work when I call it from Linux.

Here is the x86 code which works for Linux:

extern fputs
extern stdout

section .data
    text: db `hello, world
`, 0

section .text
global main
main:
    lea rdi, QWORD [rel text]
    mov rsi, [stdout]
    call fputs
    
    ret

For macos/Macho64, my first attempt was:

extern _fputs
extern _stdout

section .data
    text: db `hello, world
`, 0

section .text
global main
main:
    lea rdi, QWORD [rel text]
    mov rsi, [_stdout]
    call _fputs
    
    ret

But when linking, I am told that there is no symbol for _stdout nor is there a symbol for stdout. And I cannot find any reference online explaining the proper way to call fputs from x86 on macOS and print to stdout

I have found explanations for how to call fprintf but for printing to a file not stdout. I tried simply passing 1 as the value for stdout, but that failed to work.

question from:https://stackoverflow.com/questions/65921509/how-to-direct-fputs-to-stdout-in-x86-on-macos

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...