我尝试在 NASM 中创建套接字,但没有任何反应,而在 C 中一切正常。
我的C代码:
#include <sys/socket.h>
#include "personalUtils.h"
int main() {
int fd = socket(AF_INET, SOCK_STREAM, 0);
tryElse(fd, "Error creating a socket"); //macro
pauseHere() //macro
}
运行此命令后,我打开终端并运行,
lsof -i -a -p <PID>
,套接字就在那里,但尝试运行下面的 NASM 代码并再次调用 lsof 时,没有列出任何内容。我做错了什么?
%include "utils.asm"
;#################################
; Usefull constants
;#################################
AF_INET equ 2 ; family internetwork to UDP, TCP, etc
SOCK_STREAM equ 1 ; stream socket
NO_FLAGS equ 0
;#################################
; Main function call
;#################################
global _main
SECTION .text
_main: mov rax, 0x2000097
mov rdi, AF_INET
mov rsi, SOCK_STREAM
mov rdx, NO_FLAGS
syscall
pauseHere ; NASM macro
加载到 rax 的正确套接字(2)值是 0x2000061。它记录在https://github.com/radareorg/radare2/blob/master/libr/syscall/d/darwin-x86-64.sdb.txt
请参阅 MacOS 程序集的 64 位系统调用文档,了解有效的 write(2)。