Windows 是否可以在NASM中使用DB指令在.text段中生成可写变量?
我尝试过在Windows 是否可以在NASM中使用DB指令在.text段中生成可写变量?,windows,assembly,x86,nasm,Windows,Assembly,X86,Nasm,我尝试过在.text段中声明变量,例如使用文件\u handle:dd 0 但是,尝试在该变量中存储某些内容,如mov[file\u handle],eax会导致写入错误 我知道,我可以在.data段中声明可写变量,但为了使代码更紧凑,我想如上所述进行尝试 是否可以使用堆栈来存储这些值(例如文件句柄),或者是否可以写入上面的变量?您实际上可以安排将Windows进程的文本段映射为读+写+执行,请参阅。在使用ELF二进制文件的Linux上,这也是可能的;我认为ELF对段具有类似的标志 我认为您还可
.text
段中声明变量,例如使用文件\u handle:dd 0
但是,尝试在该变量中存储某些内容,如mov[file\u handle],eax
会导致写入错误
我知道,我可以在.data
段中声明可写变量,但为了使代码更紧凑,我想如上所述进行尝试
是否可以使用堆栈来存储这些值(例如文件句柄),或者是否可以写入上面的变量?您实际上可以安排将Windows进程的文本段映射为读+写+执行,请参阅。在使用ELF二进制文件的Linux上,这也是可能的;我认为ELF对段具有类似的标志 我认为您还可以调用Windows函数(VirtualProtect),从进程内部将文本段的映射更改为读取+写入+执行
总的来说,这听起来是一个糟糕的想法,如果您想避免使用数据页,那么一定要像C编译器那样在堆栈上保留临时变量
静态存储只在程序的一部分中使用的东西是浪费的。不,在汇编程序的
.text
部分不可能有可写的“变量”
在.text
部分中写入文件句柄:dd 0
然后组装时,标签文件句柄
引用位于二进制文件文本部分的地址。但是,文本部分是只读的
如果文本部分不是只读的,程序可以在执行时修改自身。默认情况下,可执行代码段不可写。这是一项基本的安全预防措施。不,这不是个好主意。但如果你坚持,因为这是一个玩具项目无论如何,继续 您可以通过让链接器知道如何将其标记为可写,例如,向MS链接器提供以下参数:
link /SECTION:.text,EWR ....