我想查看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