我有一个大学项目,我的教授给了我一个 DLL 文件,我需要从中提取子程序,并且没有明确定义为子程序。目的是将代码翻译成 C++ 或 C。
我用 IDA Pro 打开代码并搜索名称acalcul:
CODE:00470C9C aCalcul: ; DATA XREF: CODE:00470C0F↑o
CODE:00470C9C text "UTF-16LE", 'calcul',0
CODE:00470CAA align 4
CODE:00470CAC
CODE:00470CAC loc_470CAC: ; CODE XREF: CODE:0047094C↑j
CODE:00470CAC push ebp
CODE:00470CAD mov ebp, esp
CODE:00470CAF push ebx
CODE:00470CB0 push esi
CODE:00470CB1 push edi
CODE:00470CB2 push dword ptr [ebp+8]
CODE:00470CB5 xor eax, eax
CODE:00470CB7 push ebp
CODE:00470CB8 push offset loc_470CDC
CODE:00470CBD push dword ptr fs:[eax]
CODE:00470CC0 mov fs:[eax], esp
CODE:00470CC3 mov eax, ds:off_474634
CODE:00470CC8 mov eax, [eax]
CODE:00470CCA mov edx, [ebp+0Ch]
CODE:00470CCD mov [edx], eax
CODE:00470CCF xor eax, eax
CODE:00470CD1 pop edx
CODE:00470CD2 pop ecx
CODE:00470CD3 pop ecx
CODE:00470CD4 mov fs:[eax], edx
CODE:00470CD7 pop eax
CODE:00470CD8 xor ebx, ebx
CODE:00470CDA jmp short loc_470CE1
CODE:00470CDC ; ---------------------------------------------------------------------------
CODE:00470CDC
CODE:00470CDC loc_470CDC: ; DATA XREF: CODE:00470CB8↑o
CODE:00470CDC jmp @System@@HandleAutoException$qqrv ; System::__linkproc__ HandleAutoException(void)
CODE:00470CE1 ; ---------------------------------------------------------------------------
CODE:00470CE1
CODE:00470CE1 loc_470CE1: ; CODE XREF: CODE:00470CDA↑j
CODE:00470CE1 mov eax, ebx
CODE:00470CE3 pop edi
CODE:00470CE4 pop esi
CODE:00470CE5 pop ebx
CODE:00470CE6 pop ebp
CODE:00470CE7 retn 8
CODE:00470CE7 ; ---------------------------------------------------------------------------
CODE:00470CEA align 4
CODE:00470CEC ; [00000057 BYTES: COLLAPSED FUNCTION Mtsrdm::TMtsDataModule::AS_GetProviderNames(System::OleVariant &). PRESS CTRL-NUMPAD+ TO EXPAND]
CODE:00470D43 align 4
CODE:00470D44
我需要发现输入和算法来完成我的项目。现在我的问题是如何通过使用现有代码了解 IDA Pro 中的行为来提取函数?
Edit1:我从代码中展示的是一个示例,我真的不知道代码的哪一部分真正负责我假设的功能。
Edit2:https ://www.delicad.com/dl/FlashPolygons_32bits_en.zip 该链接提供了整个 dll,我想找到使用两点绘制一条线的部分。