|
#include <windows.h>
#include <string>
import libpe;
using namespace libpe;
// 函数声明,用于将字符串写入buffer,并更新偏移量
void WriteStringToBuffer(const std::string& str, char*& buffer, size_t& offset) {
size_t length = str.length() + 1; // 加1是为了空字符
memcpy(buffer + offset, str.c_str(), length);
offset += length;
}
// 声明导出函数
extern "C" __declspec(dllexport) void AnalyzePE(const wchar_t* filepath, void* outputBuffer);
// 导出函数的实现
void AnalyzePE(const wchar_t* filepath, void* outputBuffer) {
Clibpe pe(filepath);
const auto peImp = pe.GetImport();
if (!peImp) {
return;
}
char* buffer = static_cast<char*>(outputBuffer);
size_t offset = 0;
// 遍历所有导入的模块和函数
for (const auto& itModule : *peImp) {
for (const auto& itFunc : itModule.vecImportFunc) {
// 将每个函数名写入buffer
WriteStringToBuffer(itFunc.strFuncName, buffer, offset);
}
}
// 确保在数组的最后放置一个额外的空字符作为结束标志
buffer[offset] = '\0';
}
以上是dll的代码,以下是易语言得到代码,文件地址能正常传递到dll,但是dll运行到导入表的部分就会崩崩溃
.版本 2
.子程序 _临时子程序
.局部变量 导入表, 字节集, , "0"
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
获取导入表 (编码_Ansi到Unicode (“C:\Users\Kolomina\OneDrive - MSFT\KolominaAntiVirus_New\KoloAntiScript.dll”, 假), 导入表)
返回 ()
.子程序 获取导入表, 逻辑型, 公开
.参数 文件路径, 字节集
.参数 返回的导入表, 字节集, 数组
AnalyzePE (文件路径, 返回的导入表)
返回 (真)
|
|