linux - 定义代码段

标签 linux assembly 64-bit nasm elf

我正在尝试使用 Nasm 汇编以下代码:

section .stage1_main 
extern stage1_get_stage2_addr
global stage1_main

stage1_main:
    sub rsp, 0x8
    call stage1_get_stage2_addr 
    cmp rax, -1 
    jz error
    add rsp, 0x8
    push stage1_main
    jmp rax 

error:
     ret

.stage1_main 是我定义的新部分。问题是 Nasm 将其定义为数据部分

objdump -h main.o

main.o: 文件格式elf64-x86-64

部分:

Idx 名称 大小 VMA LMA 文件关闭 Algn 0 .stage1_main 0000001b 0000000000000000 0000000000000000 000001c0 2**0 内容、分配、加载、重新定位、只读、数据

我需要一段代码... 有没有办法将我的部分定义为代码部分(如 .text)

最佳答案

您可以让您的 section 指令明确声明该部分的内容是可执行的:

.stage1_main exec 部分

您可能还想坚持 16 字节对齐(nasm 会自动为 .text 部分执行):

section .stage1_main exec align=16

关于linux - 定义代码段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849230/

相关文章:

linux - 如何链接到特定的 glibc 版本?

linux - 从 public_html_source 到 public_html 的符号链接(symbolic link)

assembly - 如何在中断服务程序中将寄存器保存在x86_64上?

c++ - 为什么我不能像预期的那样初始化 long long?

c++ - 从 VS2008 运行可执行文件崩溃并出现错误 "Application was unable to start correctly (0x000007b)"x64

sql-server - 我无法启动 SQL Server 浏览器

linux - 查找文件的模式,创建具有该模式的文件夹并将文件复制到该文件夹​​ - Bash 脚本

regex - 从命令响应中提取数据并将其存储在变量中

linux - 使用 NASM 在 Assembly 中添加 2 个输入的数字

c - 谁将数字转换为 2 的补码形式并存储在内存位置?