定义要在程序集 x86 中注册的内联字节

问题描述 投票:0回答:1

有没有办法以这种方式传递字节:

mov ecx, byte ["mybytes",0xa,0]

而不是:

section .data
    mybytes db "mybytes",0xa,0

section .text
    global main

main:
    mov ecx, mybytes

assembly x86 byte nasm
1个回答
0
投票

感谢 Peter Cordes,我创建了一个完美的宏:

%macro count2ESI 1
        mov esi, %1
%%count_characters:
        cmp byte [esi], 0
        je %%end
        inc esi
        jmp %%count_characters
%%end:
        sub esi, %1
%endmacro

%macro print 1
        [section .rodata]
                %%data db %1,0xa,0
        __?SECT?__
                count2ESI %%data
                mov eax, 4
                mov ebx, 1
                lea ecx, %%data
                mov edx, esi
                int 0x80
%endmacro

现在我可以简单地

print "string"
并且它有效!

© www.soinside.com 2019 - 2024. All rights reserved.