读书人

程序没有导入指定的函数,该如何处理

发布时间: 2012-03-28 15:40:03 作者: rapoo

程序没有导入指定的函数
在程序中调用了 strcmp 和 strcpy 这两个函数、
编译后发现没有导入这两个函数、
编译环境是 VS2010、
链接到 MSVCRT.DLL 这个文件、

[解决办法]
一些很基本的函数可以被inline掉
strcpy_s不在此列
[解决办法]
没有用过 Dependecy Walker,不过下面是 v2010 release 下产生的汇编, 不知是否有帮助

看 375, 376 line

; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01

TITLED:\Huegli\VS2010\Projects\new\Calculator\Calculator\calculator.cpp
.686P
.XMM
include listing.inc
.modelflat

INCLUDELIB MSVCRTD
INCLUDELIB OLDNAMES

CONSTSEGMENT
$SG5504DB'123456789abcdef', 00H
$SG5505DB'123456789abcdef', 00H
$SG5507DB'fedcba987654321', 00H
$SG5508DB'pause', 00H
CONSTENDS
PUBLIC__$ArrayPad$
PUBLIC_main
EXTRN__imp__system:PROC
EXTRN_strcmp:PROC
EXTRN_strcpy:PROC
EXTRN___security_cookie:DWORD
EXTRN@__security_check_cookie@4:PROC
EXTRN@_RTC_CheckStackVars@8:PROC
EXTRN__RTC_CheckEsp:PROC
EXTRN__RTC_Shutdown:PROC
EXTRN__RTC_InitBase:PROC
;COMDAT rtc$TMZ
; File d:\huegli\vs2010\projects\new\calculator\calculator\calculator.cpp
rtc$TMZSEGMENT
__RTC_Shutdown.rtc$TMZ DD FLAT:__RTC_Shutdown
rtc$TMZENDS
;COMDAT rtc$IMZ
rtc$IMZSEGMENT
__RTC_InitBase.rtc$IMZ DD FLAT:__RTC_InitBase
; Function compile flags: /Odtp /RTCsu
rtc$IMZENDS
_TEXTSEGMENT
_a2$ = -48; size = 16
_a1$ = -24; size = 16
__$ArrayPad$ = -4; size = 4
_mainPROC
; Line 373
pushebp
movebp, esp
subesp, 52; 00000034H
pushesi
pushedi
leaedi, DWORD PTR [ebp-52]
movecx, 13; 0000000dH
moveax, -858993460; ccccccccH
rep stosd
moveax, DWORD PTR ___security_cookie
xoreax, ebp
movDWORD PTR __$ArrayPad$[ebp], eax
; Line 375
pushOFFSET $SG5504
leaeax, DWORD PTR _a1$[ebp]
pusheax
call_strcpy
addesp, 8
; Line 376
pushOFFSET $SG5505
leaecx, DWORD PTR _a2$[ebp]
pushecx
call_strcpy
addesp, 8
; Line 377
leaedx, DWORD PTR _a2$[ebp]
pushedx
leaeax, DWORD PTR _a1$[ebp]
pusheax
call_strcmp
addesp, 8
testeax, eax
jneSHORT $LN1@main
; Line 379
pushOFFSET $SG5507
leaecx, DWORD PTR _a1$[ebp]
pushecx
call_strcpy
addesp, 8
$LN1@main:
; Line 384
movesi, esp
pushOFFSET $SG5508
callDWORD PTR __imp__system
addesp, 4
cmpesi, esp
call__RTC_CheckEsp
; Line 385
xoreax, eax
; Line 387
pushedx
movecx, ebp
pusheax
leaedx, DWORD PTR $LN7@main
call@_RTC_CheckStackVars@8
popeax
popedx
popedi
popesi
movecx, DWORD PTR __$ArrayPad$[ebp]
xorecx, ebp
call@__security_check_cookie@4
addesp, 52; 00000034H
cmpebp, esp
call__RTC_CheckEsp
movesp, ebp
popebp
ret0
$LN7@main:
DD2
DD$LN6@main
$LN6@main:
DD-24; ffffffe8H
DD16; 00000010H
DD$LN4@main
DD-48; ffffffd0H
DD16; 00000010H
DD$LN5@main
$LN5@main:
DB97; 00000061H
DB50; 00000032H
DB0
$LN4@main:
DB97; 00000061H
DB49; 00000031H
DB0
_mainENDP
_TEXTENDS
END

读书人网 >C语言

热点推荐