gpt4 book ai didi

linux - 在 nasm 程序集中的 .data 段之外声明字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:31 25 4
gpt4 key购买 nike

有没有办法像这样在汇编代码的.text部分定义一个字符串指针?

SECTION .text          

global main


main:
fmt: dd "%s", 10, 0

或者可能构造了字符串并有一个指向它的寄存器,将所有这些都可以在 .text 部分中完成?

最佳答案

汇编程序非常愚蠢,你必须显式地编写所有内容,如下所示:

SECTION .text          

global main


main:
; Some code here, you don't want to execute data.

mov ebx, fmt ; ebx points to fmt[0] ('%')
mov eax, dword [pfmt] ; eax also points to fmt[0] ('%')

; Some more code here.

pfmt dd fmt ; pfmt is a constant pointer to fmt[0] ('%')
fmt db "%s", 10, 0 ; fmt is a constant string

您可以使用宏来简化编码:

%macro  LoadRegWithStrAddr 2+

jmp %%endstr
%%str: db %2
%%endstr:
mov %1, %%str

%endmacro

SECTION .text

global main


main:
LoadRegWithStrAddr ebx, "%s", 10, 0 ; ebx points to "%s\n"

LoadRegWithStrAddr ebx, "%s", 10, 0 扩展为:

        jmp     %%endstr
%%str: db "%s", 10, 0
%%endstr:
mov ebx, %%str

请参阅 NASM 文档。

关于linux - 在 nasm 程序集中的 .data 段之外声明字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8526879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com