首页 > 解决方案 > 如何更改 NASM 中的变量(x86,Microsoft Windows 10)

问题描述

我想更改 NASM 中变量的值。

我在互联网上搜索了很长时间,并尝试了很多东西。

我试过这个:

global  _main
extern  _printf

section .data
original: db "Hello, world", 10, 0
new: db "Hello", 10, 0

section .text
_main:
    mov [original], new

    push original
    call _printf
    add esp, 4

    ret

这不起作用,所以我试过这个。

global  _main
extern  _printf

section .data
original: db "Hello, world", 10, 0
new: db "Hello", 10, 0

section .text
_main:
    mov eax, new
    mov [original], eax

    push original
    call _printf
    add esp, 4

    ret

好吧,它可以正常工作,但它会不断打印奇怪的东西。

@@

(其实上面的字符串开头有上下方向的箭头形字符,但是我省略了,因为好像没有识别出来)

我已经尝试并搜索了很多东西。但我找不到解决方案。那么如何更改 NASM 中变量的值呢?(我在 Windows 中使用 x86 程序集)

谢谢。

标签: assemblyx86nasm

解决方案


您不能使用单个指令覆盖字符串。您需要使用循环来复制字符串的字节,同时检查标记字符串结尾的空字节。例如:

        mov edi, original
        mov esi, new
.loop:
        mov al, [esi]
        mov [edi], al
        add esi, 1
        add edi, 1
        test al, al
        jnz .loop

推荐阅读