我已经把我的大脑划到极限和极限在网上搜索关于汇编中的文件处理但我仍然对此感到困惑。 我正在使用linux shell来创建AT& T语法的汇编程序。基本上我不明白如何将文件名推送到ebx。以下是令我困惑的代码。
section .text
global _start
_start:
pop ebx ; argc (argument count)
pop ebx ; argv[0] (argument 0, the program name)
pop ebx ; The first real arg, a filename
mov eax,8 ; The syscall number for creat() (we already have the filename in ebx)
mov ecx,00644Q ; Read/write permissions in octal (rw_rw_rw_)
int 80h ; Call the kernel
; Now we have a file descriptor in eax
我不明白,ebx的弹出值如何帮助打开文件? Plz解释了这些方面。我猜这些行正在接受输入,就像我们在C中所做的那样(例如在main(int argc,char * argv [])}中。但我无法与之相关联。
答案 0 :(得分:1)
参数传递给堆栈中的其他函数。函数可以通过偏移访问堆栈或单独弹出值来检索它们。
pop ebx
pop ebx
pop ebx
因为每个弹出操作都会覆盖ebx
的值,所以ebx会保留最后一个值。所以这三条指令相当于:
mov ebx, [esp+8] ; esp+0 argc, esp+4 argv, esp+8 first param