ASM x86 - 将值移入内存
问题描述:
我正在使用32位Linux系统,我无法理解如何将值存入内存。 这是一个例子:ASM x86 - 将值移入内存
str: .asciz "AAA"
p: .long 0
.text
.globl main
main:
movl $str, p #Save the address of str into p (?)
我知道,我能做的movl $str, %eax
存储EAX寄存器内的STR地址,但因为我收到分段错误,我不能做p
同样的事情。
我也试过这种替代,但结果始终是一个分段错误:
main:
call self
self:
pop %ebp
movl $str, (p-self) (%ebp)
有人能向我解释如何以正确的方式使用mov
? 我也想知道是否可以在编译时将str地址存储到p中。
答
有人可以向我解释如何以正确的方式使用mov吗?
这不是关于mov
。没关系。您需要指定一个部分来放入数据。在程序的前面添加.data
,将其放入.data
部分。无论如何,数据默认放入.text
部分,这在现代操作系统中是只读的。写入它会导致分段错误。
我也想知道是否有可能将str地址存储在 编译时的p中。
这是可能的:
p: .long str