我需要将第一个变量的值更改为第二个,但是我编写的代码无法正常工作。 我尝试过:
mov DWORD [enety_26500], enety_26501
但是程序仍然显示我“你好,世界!”
有人可以帮忙吗?
global _main
extern _ExitProcess@4
extern _printf
section .text
_main:
call main
pop eax
push 0
call _ExitProcess@4
ret
print:
push ebp
mov ebp, esp
mov eax, [ebp+8]
push eax
call _printf
pop ebp
push 0
ret
main:
push ebp
mov ebp, esp
push enety_26500
call print
pop eax
mov DWORD [enety_26500], enety_26501
push enety_26500
call print
pop eax
pop ebp
push 0
ret
section .data
enety_26500:
dw 'Hello, world!', 10, 0
enety_26501:
dw 'Hello,', 10, 0
答案 0 :(得分:0)
不清楚您要做什么。看来您正在尝试执行此操作(在C语言中,使用更清晰的名称):
const char *stra = "hello world";
const char *strb = "hello";
...
printf(stra);
stra = strb;
printf(stra);
问题是,您不能有标签告诉您字符串位于何处,然后尝试更改标签。这没有意义-标签本身不是容器或位置,而只是...标签。将标签存储在eax中并更改eax,或将标签存储在另一个变量中:
push DWORD PTR sptr
call printf
mov eax, strb
mov DWORD PTR sptr, eax
push DWORD PTR sptr
call printf
....
sptr:
.long stra
stra:
.string "hello world"
strb:
.string "hello"
反正就是这样!
编辑:只是出于兴趣:如果您想更改stra,并且stra存储在可写数据段(即.data)中,则可以执行以下操作:
mov BYTE PTR stra+5, 0
,它将在“ hello”部分之后写入0,并在该点终止字符串。直接在stra上调用printf会打印“ hello”。