【发布时间】:2021-04-04 06:11:46
【问题描述】:
我正在阅读此页面https://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
这是一个例子
; tiny.asm
BITS 32
GLOBAL _start
SECTION .text
_start:
mov eax, 1
mov ebx, 42
int 0x80
Here we go:
$ nasm -f elf tiny.asm
$ gcc -Wall -s -nostdlib tiny.o
$ ./a.out ; echo $?
42
Ta-da! And the size?
$ wc -c a.out
372 a.out
但是我没有得到相同的结果。我尝试了nasm -f elf64,然后在 gcc 上尝试了-m32(然后再次在 clang 上)。无论我尝试什么,我都无法让它变得很小。我在 Arch linux 上
$ cat tiny.asm
; tiny.asm
BITS 32
GLOBAL _start
SECTION .text
_start:
mov eax, 1
mov ebx, 42
int 0x80
[eric@eric test]$ gcc -Wall -s -nostdlib -m32 tiny.o
[eric@eric test]$ stat ./a.out
File: ./a.out
Size: 12780 Blocks: 32 IO Block: 4096 regular file
Device: 2eh/46d Inode: 1279 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1000/ eric) Gid: ( 1000/ eric)
Access: 2020-12-26 17:19:19.216294869 -0500
Modify: 2020-12-26 17:19:19.216294869 -0500
Change: 2020-12-26 17:19:19.216294869 -0500
Birth: -
【问题讨论】:
-
发布
objdump -d a.out的输出。但我怀疑这与添加到 a.out 的不同页面有关,这些页面可能并不总是使用不同的工具或在不同的发行版上生成。有些事情可能是 - 展开 .eh_frame 部分中的表格、构建注释、cmets 以及对齐方式的变化。
标签: linux assembly gcc x86-64 nasm