gpt4 book ai didi

linux - Nasm 代码在 windows 上运行但在 linux 上不运行

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

我尝试汇编和链接我老师的 NASM 代码,但它在我的 linux (Ubuntu 16.03) 上无法运行,而在她的电脑 (Windows) 上运行

segment .data
a dw 10
segment .bss
segment .text
global _main:
extern _printf
_main:
_b100: mov eax, 10
_b150: mov eax, a
_b200: mov ebx, eax
fin:
ret

这些是我组装代码所遵循的说明

nasm -g -f elf32 test.asm;ld -m elf_i386 -s -o demo *.o

ld 返回一个错误

ld: warning: cannot find entry symbol _start; defaulting to 0000000008048080

不管错误的影响,每次我运行命令时都会生成可执行文件,但是当我想使用 gdb 在程序上执行断点时,我不能。

最佳答案

首先,代码需要为 linux 打补丁:

-global _main:
+global main

-_main:
+main:

main 符号中删除下划线。同样在 global 指令中不要添加冒号,这是在指定新标签时需要的。

下划线的移除也适用于其他外部符号,例如 printf 或者当您使用 global 将函数从您的 asm 发布到 C 时。

编译:

nasm -g -felf32 -Fdwarf test.asm; gcc -m32 -o demo test.o

并且您需要安装 nasmgcc 和 32 位库,不确定最小的软件包集是什么,但是通过 sudo apt- get install nasm gcc gcc-multilib 即使是全新安装 *buntu 也可能足够了。

关于linux - Nasm 代码在 windows 上运行但在 linux 上不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46761283/

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