【问题标题】:C StdLib malloc From (N)ASMC StdLib malloc 来自 (N)ASM
【发布时间】:2014-01-22 21:42:17
【问题描述】:

我希望从 ASM 文件中调用 malloc()。 在 ASM 中:

extern malloc

没用。我想链接 CStdLib。

【问题讨论】:

  • 什么?我说的是 NASM 文件。你说的是一个 C 文件。我很清楚 C 内部的电话。我喜欢你给我投票的方式,你完全错了。

标签: c assembly malloc nasm standard-library


【解决方案1】:

“没用”到底是什么意思?您需要做的不仅仅是使用extern,还需要链接到 C 库。最简单的方法是使用gcc 链接。正如您没有提到您的代码是 32 位还是 64 位,我将使用 32 位。 64位的流程基本相同。

extern exit, printf, malloc, free

global main

BUFFER_SIZE     equ 27

section .data
fmtstr      db  "%s", 10, 0

section .text
main:

    push    BUFFER_SIZE
    call    malloc
    add     esp, 4 * 1
    mov     esi, eax

    xor     ecx, ecx
    mov     edx, 97

.FillBuffer:
    mov     byte [esi +  ecx], dl
    inc     edx
    inc     ecx
    cmp     ecx, BUFFER_SIZE - 1
    jne     .FillBuffer

    mov     byte [esi + ecx], 0

    push    esi
    push    fmtstr
    call    printf
    add     esp, 4 * 2

    push    esi
    call    free
    add     esp, 4 * 1

    push    0
    call    exit
    add     esp, 4 * 1

和生成文件:

APP=malloctest

all: $(APP) clean

$(APP): $(APP).o    
    gcc -o $(APP) $(APP).o 

$(APP).o: $(APP).asm
    nasm -f elf $(APP).asm 

clean:
    rm $(APP).o 

【讨论】:

  • 非常感谢您的回复!但是,我使用以下(x64 机器 x86 代码)编译了 .asm 文件:nasm -f elf32 -o exec file.asmld -m elf_i386。这就是我说“没用”时的意思:gyazo.com/c11f7d980d623ee163eb188a8c763cc0
  • -lc 到 ld。可能还需要-I/lib/ld-linux.so.2 或您的系统放置的任何位置。
猜你喜欢
  • 2010-12-21
  • 2012-06-13
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2022-07-11
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多