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