Nasm 代码 运行 在 windows 但不在 linux
Nasm code running on windows but not on linux
我尝试 assemble 和 link 我老师的 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
这些是我遵循 assemble 代码
的说明
nasm -g -f elf32 test.asm;ld -m elf_i386 -s -o demo *.o
ld returns 一个错误
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
并且您需要安装 nasm
、gcc
和 32 位库,不确定最小的软件包集是什么,但是 sudo apt-get install nasm gcc gcc-multilib
可能就足够了*buntu 的全新安装。
我尝试 assemble 和 link 我老师的 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
这些是我遵循 assemble 代码
的说明nasm -g -f elf32 test.asm;ld -m elf_i386 -s -o demo *.o
ld returns 一个错误
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048080
不管错误的影响,每次我 运行 命令都会生成可执行文件,但是当我想用 gdb 在程序上执行断点时,我不能。
首先,代码需要为 linux 打补丁:
-global _main:
+global main
-_main:
+main:
从 main
符号中删除下划线。同样在 global
指令中不要添加冒号,这是在指定新标签时需要的。
删除下划线也将适用于其他外部符号,例如 printf
或者当您使用 global
.
正在编译:
nasm -g -felf32 -Fdwarf test.asm; gcc -m32 -o demo test.o
并且您需要安装 nasm
、gcc
和 32 位库,不确定最小的软件包集是什么,但是 sudo apt-get install nasm gcc gcc-multilib
可能就足够了*buntu 的全新安装。