马洛克的汇编代码



我想查看malloc()calloc()free()的汇编代码,但是当我在radare2上打印汇编代码时,它给了我以下代码:

push rbp                 
mov rbp, rsp
sub rsp, 0x10
mov eax, 0xc8            
mov edi, eax             
call sym.imp.malloc      
xor ecx, ecx
mov qword [local_8h], rax
mov eax, ecx
add rsp, 0x10
pop rbp
ret

如何查看sym.imp.malloc函数代码?有没有办法查看代码或任何网站来查看程序集?

由于libc是一个开源库,因此它是免费提供的,您可以简单地阅读源代码。
malloc 的源代码可以在很多地方在线获得(示例(,您可以在malloc/malloc.c下查看不同版本的 libc 源代码 这里.

符号sym.imp.malloc是 radare 如何标记 PLT(程序链接表(中malloc的地址,而不是函数本身。

可以通过多种方式读取函数的程序集:

使用 radare2 打开本地 libc 库,查找 malloc,分析函数,然后反汇编地打印它:

$ r2 /usr/lib/libc.so.6
[0x00020630]> s sym.malloc
[0x0007c620]> af
[0x0007c620]> pdf

如果你想看到malloc链接到另一个二进制文件时,你需要在debug mode中打开二进制文件,然后步到main使其加载库,然后搜索malloc的地址,寻找它,分析功能并打印反汇编:

$ r2 -d /bin/ls
Process with PID 20540 started...
= attach 20540 20540
bin.baddr 0x00400000
Using 0x400000
Assuming filepath /bin/ls
asm.bits 64
[0x7fa764841d80]> dcu main
Continue until 0x004028b0 using 1 bpsize
hit breakpoint at: 4028b0
[0x004028b0]> dmi libc malloc~name=malloc$
vaddr=0x7fa764315620 paddr=0x0007c620 ord=4162 fwd=NONE sz=388 bind=LOCAL type=FUNC name=malloc
vaddr=0x7fa764315620 paddr=0x0007c620 ord=5225 fwd=NONE sz=388 bind=LOCAL type=FUNC name=malloc
vaddr=0x7fa764315620 paddr=0x0007c620 ord=5750 fwd=NONE sz=388 bind=GLOBAL type=FUNC name=malloc
vaddr=0x7fa764315620 paddr=0x0007c620 ord=7013 fwd=NONE sz=388 bind=GLOBAL type=FUNC name=malloc
[0x004028b0]> s 0x7fa764315620
[0x7fa764315620]> af
[0x7fa764315620]> pdf

最新更新