Linux 执行二进制文件api,在Linux下执行平面二进制文件

我们可以看一下ELF

规范,和

/usr/include/linux/elf.h,和

标准创建的可执行文件

工具,弄清楚我们的空洞

ELF可执行文件应该是这样的。但,

如果你是不耐烦的类型,你可以

只需使用我在这里提供的那个:

BITS 32

org 0x08048000

ehdr: ; Elf32_Ehdr

db 0x7F, "ELF", 1, 1, 1, 0 ; e_ident

times 8 db 0

dw 2 ; e_type

dw 3 ; e_machine

dd 1 ; e_version

dd _start ; e_entry

dd phdr - $$ ; e_phoff

dd 0 ; e_shoff

dd 0 ; e_flags

dw ehdrsize ; e_ehsize

dw phdrsize ; e_phentsize

dw 1 ; e_phnum

dw 0 ; e_shentsize

dw 0 ; e_shnum

dw 0 ; e_shstrndx

ehdrsize equ $ - ehdr

phdr: ; Elf32_Phdr

dd 1 ; p_type

dd 0 ; p_offset

dd $$ ; p_vaddr

dd $$ ; p_paddr

dd filesize ; p_filesz

dd filesize ; p_memsz

dd 5 ; p_flags

dd 0x1000 ; p_align

phdrsize equ $ - phdr

_start:

; your program here

filesize equ $ - $$

此图片包含ELF标头,

将文件标识为Intel 386

可执行文件,没有节头

表和程序头表

包含一个条目。说入口

指示程序加载器加载

将整个文件存入内存(它是

程序的正常行为

包括其ELF标题和程序

内存图像中的标头表)

从内存地址0x08048000开始

(这是默认地址

要加载的可执行文件,并开始

在_start执行代码,其中

程序后立即出现

标头表。没有.data段,没有

.bss段,没有评论 - 什么都没有

但是必需品。

所以,让我们加入我们的小程序:

; tiny.asm

org 0x08048000

;

; (as above)

;

_start: mov bl, 42 xor eax, eax inc eax int 0x80 filesize equ $ - $$

并尝试一下:

$ nasm -f bin -o a.out tiny.asm

$ chmod +x a.out

$ ./a.out ; echo $?

42

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值