当前位置: 代码迷 >> 汇编语言 >> 怎样看库函数的代码?解决方法
  详细解决方案

怎样看库函数的代码?解决方法

热度:8736   发布时间:2013-02-26 00:00:00.0
怎样看库函数的代码??
public   _main
_main proc   near

var_58 =   dword ptr   -58h
var_54 =   dword ptr   -54h
var_3C =   dword ptr   -3Ch
var_2C =   dword ptr   -2Ch
var_28 =   dword ptr   -28h
var_24 =   word   ptr   -24h
var_22 =   dword ptr   -22h
var_4 =   dword ptr   -4

push ebp
mov ebp,   esp
push edi
sub esp,   54h
and esp,   0FFFFFFF0h
mov eax,   0
add eax,   0Fh
add eax,   0Fh
shr eax,   4
shl eax,   4
mov [ebp+var_3C],   eax
mov eax,   [ebp+var_3C]
call __alloca   ;请问这个函数在那个库文件里????
call ___main
mov eax,   ds:dword_74
mov [ebp+var_28],   eax
movzx eax,   ds:word_78
mov [ebp+var_24],   ax
lea edi,   [ebp+var_22]
cld
mov ecx,   0Eh
mov al,   0
rep   stosb
lea eax,   [ebp+var_28]
mov [esp+58h+var_54],   eax
lea eax,   [ebp+var_2C]
mov [esp+58h+var_58],   eax
call _strcpy     ;请问这个函数在那个库文件里????
mov eax,   0
mov edi,   [ebp+var_4]
leave
retn
_main endp

上面是一个小程序的反汇编结果
源程序如下
#include   <string.h>

int   main()
{
                char   b[20]= "abcde ";
                char   a[4];    
                strcpy(a,b);

                return   0;
}

我想看反汇编代码中调用到的库函数的反汇编代码
这个程序我用Dev-C++编写的
用gcc编译
用ida反汇编出来的

我的主要目的是想知道__alloca和_strcpy是怎么样使用参数的。
我在C程序中定义了b的长度是20,a的长度是4,那么反应到编译好的结果中,怎么能看出来这点??
这个就要看alloca到底alloc了多少个空间。
不难发现,源程序中,已经发生了溢出了,但是实际上程序并没有崩溃

------解决方案--------------------------------------------------------
这些函数是 c++ 静态库中的吧, 具体定义在那个 .lib 文件中, 看函数的类型了. alloca 属于内存分配方面的, strcpy 是字符串操作方面的, 可能在相应的 lib 文件中, 也有可能被集中在一个整体的 .lib 库文件里. 可以到自己 c++ 的 lib 目录下看看, 用 ida 反汇编试试
------解决方案--------------------------------------------------------
怎么结果不太一样啊
.text:00401290 sub_401290 proc near ; CODE XREF: ___mingw_CRTStartup+E2p
.text:00401290
.text:00401290 var_58 = dword ptr -58h
.text:00401290 var_54 = dword ptr -54h
.text:00401290 var_3C = dword ptr -3Ch
.text:00401290 var_2C = dword ptr -2Ch
.text:00401290 var_28 = dword ptr -28h
.text:00401290 var_24 = word ptr -24h
.text:00401290 var_22 = dword ptr -22h
.text:00401290 var_4 = dword ptr -4
.text:00401290
.text:00401290 push ebp
.text:00401291 mov ebp, esp
.text:00401293 push edi
.text:00401294 sub esp, 54h ; char *
.text:00401297 and esp, 0FFFFFFF0h
.text:0040129A mov eax, 0
.text:0040129F add eax, 0Fh
.text:004012A2 add eax, 0Fh
.text:004012A5 shr eax, 4
.text:004012A8 shl eax, 4
.text:004012AB mov [ebp+var_3C], eax
.text:004012AE mov eax, [ebp+var_3C]
.text:004012B1 call ___chkstk
.text:004012B6 call ___main
.text:004012BB mov eax, ds:dword_403000
  相关解决方案