Kle*_*nko 12 linux ubuntu 64-bit assembly 32-bit
我有用32位汇编语言编写的程序......现在我无法在64位操作系统上编译它.在我们学校他们是具体的,程序必须用32位版本编写.这是我的计划:
bits 32
extern _printf
global _start
section .data
message db "Hello world!!", 10, 0
section .text
_start:
pushad
push dword message
call _printf
add esp, 4
popad
ret
Run Code Online (Sandbox Code Playgroud)
任何的想法?我已经尝试了很多方法来编译它.编译后输出错误:
nasm -f elf64 vaja4.asm
ld vaja4.o -o vaja4
./vaja4
Run Code Online (Sandbox Code Playgroud)
输出:
vaja4.o: In function `_start':
vaja4.asm:(.text+0x7): undefined reference to `_printf'
Run Code Online (Sandbox Code Playgroud)
iab*_*der 20
首先更改_printf
为printf
和_start
符号main
,然后使用gcc
链接目标文件,这将自动链接到libc
,你需要这样做,因为AFAIK你不能没有链接到libcmain
.你也应该在组装时使用elf32而不是elf64,因为代码有32位指令:
bits 32
extern printf
global main
section .data
message db "Hello world!!", 10, 0
section .text
main:
pushad
push dword message
call printf
add esp, 4
popad
ret
Run Code Online (Sandbox Code Playgroud)
并建立:
nasm -f elf32 vaja4.asm
gcc -m32 vaja4.o -o vaja4
$./test
$Hello world!!
Run Code Online (Sandbox Code Playgroud)
这里有一个很好的教程:
http://jdefr.swippet.com/2012/03/22/using-libc-with-assembly/
编辑:
由于您现在正在64位系统上编译32位代码,因此您需要安装32位版本的库
apt-get install ia32-libs
Run Code Online (Sandbox Code Playgroud)
小智 7
在Ubuntu 12.10上,您需要先安装开发包
sudo apt-get update
sudo apt-get install libc6-dev-i386
Run Code Online (Sandbox Code Playgroud)
对于
gcc -m32 vaja4.o -o vaja4
Run Code Online (Sandbox Code Playgroud)
上班.
归档时间: |
|
查看次数: |
26837 次 |
最近记录: |