在32位nasm汇编中模仿sbrk

时间:2016-10-24 08:59:40

标签: assembly x86 nasm system-calls brk

嘿,伙计们,我的第二年计算机科学项目,我们的任务是在32位nasm程序集中创建一个垃圾收集器。除了一件事,我设法让一切运行正常。我们假设使用对brk的系统调用来模仿gclib sbrk函数。

这是我的工作版本:

.if2:
 mov eax, 0
 push eax
 call abrk
 add esp, 4
 mov ecx, eax
 mov edx, num_units
 shl edx, 3
 push edx
 call sbrk
 add esp, 4
 cmp eax, -1
 je .if2body
 mov vp, ecx
 jmp .cont1
.if2body:
mov eax, 0x00      
jmp    .return

现在要摆脱sbrk,我做了以下操作,导致了一个完全不同的功能中的段错误:

.if2:
 mov eax, 0
 push eax
 call abrk
 add esp, 4
 mov ecx, eax
 mov edx, num_units
 shl edx, 3
 add eax, edx
 push eax
 call abrk
 add esp, 4
 cmp eax, ecx
 je .if2body
 mov vp, ecx
 jmp .cont1
.if2body:
mov eax, 0x00  
jmp    .return

这是abrk功能:

%define SYS_brk 0x2d
%define addr [ebp+8]
abrk:
 push ebp
 mov ebp, esp
 push ebx
 mov eax, SYS_brk
 mov ebx, addr
 int 0x80
.end:
 pop ebx
 mov esp, ebp
 pop ebp
 ret

我不知道出了什么问题,我问过我的讲师他也找不到错误。

此外,在我的大学实验室电脑上工作但不起作用的版本可能是因为ubuntu版本的差异造成的吗? 谢谢你的帮助。

0 个答案:

没有答案