此问题主要是在没有db
或类似的任何帮助程序的情况下,如何在汇编中处理任意长字符串的路径名。我已经看到了几个示例,例如this,它显示:
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
;create the file
mov eax, 8
mov ebx, file_name
mov ecx, 0777 ;read, write and execute by all
int 0x80 ;call kernel
section .data
file_name db 'myfile.txt'
但是,我特别想了解如何动态地执行此操作。我想(1)从汇编的角度更好地理解文件名的要求(是否需要空终止符等),更重要的是(2)使用db
指定文件名without ]或任何汇编程序助手。例如,您可以通过命令行指定文件名,目标文件将不知道其结构。
您如何做到这一点?
只需以某种方式在内存中构建字符串(使用空终止符,如注释中所指出),然后将指针传递给它以代替file_name
。要使用命令行参数,它已经为您构建,因此只需指向它即可,如下所示:mov ebx, [esp + 8]
(作为参考,它等效于argv[1]
)。