我正在寫彙編,我想弄清楚如何執行一個execve系統調用,而不是輸出打印到終端,我想知道它的存儲位置,所以我可以稍後使用它,有點像管道命令。在彙編中執行它後,如何將execve系統調用的輸出返回到寄存器或堆棧?
例如,這裏的組件,用於執行所述命令「其」經由execve的,基本上執行命令「$其中LS」:
GLOBAL _start
SECTION .TEXT
_start:
XOR EAX,EAX
PUSH EAX
PUSH 0x68636968
PUSH 0x772f6e69
PUSH 0x622f7273
PUSH 0x752f2f2f
MOV EBX, ESP
PUSH EAX
PUSH 0x736c
MOV ESI, ESP
XOR EDX, EDX
PUSH EDX
PUSH ESI
PUSH EBX
MOV ECX, ESP
MOV AL, 0x0B; EXECVE SYSCALL NUMBER
INT 0x80
7-10行推/usr/bin/which
到堆棧的地址,和第13行將參數ls
推入堆棧。然後它將參數數組推入堆棧並將其存儲在ECX中,使EBX指向/usr/bin/which
位置的地址,並將EAX設置爲execve系統調用的系統調用號0xb(11)。執行時,它會返回/bin/ls
,我們要求它找到ls
的位置。
如何將/bin/ls
的結果存儲在某處供其他用途使用?就像如果我想繼續編寫代碼並使用這裏返回的代碼作爲下一段代碼的一部分,我該如何將返回值保存在寄存器或堆棧中?
[重定向exec輸出到緩衝區或文件]的可能重複(https://stackoverflow.com/questions/2605130/redirecting-exec-output-to-a-buffer-or-file)。 –
execve不會返回,除非它失敗。 – stark