如何将字符串数组作为参数传递给函数?
How to pass array of strings as parameter to function?
如何将字符串数组作为参数传递给汇编程序中的函数?
例如,假设我想调用如下所示的 execve() 函数:
int execve(const char *filename, char *const argv[], char *const envp[]);
所以我这样做:
test.asm
format elf executable
entry main
main:
mov eax, 11 ; execve - executes program
mov ebx, filename ; label name is address of string variable
mov ecx, args ; label name is address of array of strings?
mov edx, 0 ; NULL
int 80h
mov eax, 1 ;exit
int 80h
ret
filename db '/bin/ls', 0 ; path to program
args db '/bin/ls', 0, '.', 0, 0 ; array should end with empty string to
; indicate end of array
生成文件
all:
~/apps/fasm/fasm ./test.asm
但是当我 运行 我的程序 execve() 无法执行请求的程序并且 strace ./test 显示此消息:
execve("/bin/ls", [0x6e69622f, 0x736c2f, 0x2e], [/* 0 vars */]) = -1 EFAULT (Bad address)
如何正确地将 "args" 变量传递给 execve 函数?
谢谢:)
你知道这在 C 中是如何工作的吗?字符串是指针,字符串数组是指针数组。因此,您需要执行以下操作:
filename db '/bin/ls', 0
dot db '.', 0
args dd filename, dot, 0
注意args
是dd
得到指针大小的项,里面填的是字符串的地址。
如何将字符串数组作为参数传递给汇编程序中的函数? 例如,假设我想调用如下所示的 execve() 函数:
int execve(const char *filename, char *const argv[], char *const envp[]);
所以我这样做:
test.asm
format elf executable
entry main
main:
mov eax, 11 ; execve - executes program
mov ebx, filename ; label name is address of string variable
mov ecx, args ; label name is address of array of strings?
mov edx, 0 ; NULL
int 80h
mov eax, 1 ;exit
int 80h
ret
filename db '/bin/ls', 0 ; path to program
args db '/bin/ls', 0, '.', 0, 0 ; array should end with empty string to
; indicate end of array
生成文件
all:
~/apps/fasm/fasm ./test.asm
但是当我 运行 我的程序 execve() 无法执行请求的程序并且 strace ./test 显示此消息:
execve("/bin/ls", [0x6e69622f, 0x736c2f, 0x2e], [/* 0 vars */]) = -1 EFAULT (Bad address)
如何正确地将 "args" 变量传递给 execve 函数?
谢谢:)
你知道这在 C 中是如何工作的吗?字符串是指针,字符串数组是指针数组。因此,您需要执行以下操作:
filename db '/bin/ls', 0
dot db '.', 0
args dd filename, dot, 0
注意args
是dd
得到指针大小的项,里面填的是字符串的地址。