我正在为 linux 编写一个 nasm 中的小型库,并且正在实现 malloc atm。
代码的 C 表示形式看起来像
void * malloc(int size) {
return mmap(0, size, 3, 34, -1, 0);
}
现在我必须将其转换为程序集,但我一直在加载参数。
mov eax, 90
; load args (help)
int 0x80
; move adress to eax
我想知道如何将 C 代码转换为 asm。在大多数情况下,系统调用的参数的映射顺序与汇编中的顺序相同,但 mmap 需要 6 个参数,而内核最多需要 5 个参数。
我还想知道返回值的存储位置。
那么,我应该如何实现它。
更新:
代码:
section .data
mmap_arg: ; ugly
.addr: dq 0
.len: dq 512
.prot: dq 3
.flags: dq 34
.fd: dq -1
.offset: dq 0
mmap_test:
mov eax, 90
mov ebx, mmap_arg
int 0x80
它似乎在工作,但是当我在 eax 的地址加载一些东西时,我得到了一个段错误。当我用 ebx 替换 eax 时,它运行没有错误。有人可以确认返回的地址是在 ebx 中,还是我在使用 ebx 时写在 .data 部分。
Gdb 显示只有 eax 在 int 0x80 之后被修改。我又卡住了。时间不早了,我明天再看看。