当前位置: 首页 > news >正文

PE结构之导出表

导出表结构中各种值的意义
​​​​​​

 根据函数地址表遍历函数名称RVA表,和上面的图是逆过程

//函数地址表 和当前内存中的位置DWORD AddressOfFunctionsFOA = RVAToFOA(LPdosHeader, LPexprotDir->AddressOfFunctions);PDWORD LPFunctionsAddressInMemary = (PDWORD)((char*)LPdosHeader + AddressOfFunctionsFOA);//名称序号表的FOA 和在当前内存的位置DWORD AddressOfNameOrdinalsFOA = RVAToFOA(LPdosHeader, LPexprotDir->AddressOfNameOrdinals);PWORD WPNameOrdinalsInMemary = (PWORD)((char*)LPdosHeader + AddressOfNameOrdinalsFOA);//名称字符串RVA表和在当前内存的位置DWORD AddressOfNamesFOA = RVAToFOA(LPdosHeader, LPexprotDir->AddressOfNames);PDWORD LPNamesAddressInMemary= (PDWORD)((char*)LPdosHeader + AddressOfNamesFOA);//遍历函数地址表 ,for (size_t i = 0; i < LPexprotDir->NumberOfFunctions; i++){printf("[%d]",i);/*-----------------------------------------------使用.def文件导出函数时,如果序号之间有空位比如EXPORTSadd    @2sub    @3 NONAMEmul    @7div1    @8那么在函数地址表中就会有 0地址填充-------------------------------------------------*/if (*LPFunctionsAddressInMemary == 0){printf("0x%x\n", *LPFunctionsAddressInMemary);continue;}printf("\t\t\t0x%x", *LPFunctionsAddressInMemary);//遍历名称序号表/*-----------------------------------------------* 如果函数地址表的索引 和 名称序号表中的值相同,说明这个函数* 是以名称导出的-------------------------------------------------*/for (size_t j = 0; j< LPexprotDir->NumberOfNames; j++){if (*WPNameOrdinalsInMemary == i)//如果 函数地址表的索引 == 名称序号表中保存的值,说明这个函数是以 名称导出的{printf("\t\t\t\t%d", *WPNameOrdinalsInMemary);//输出函数的名称/*------------------------------------------------ -* 名称序号表的 索引 就对于 函数名称RVA表 的索引* 这样就可以去找函数名了------------------------------------------------ - */char* str = (char*)LPdosHeader + RVAToFOA(LPdosHeader, LPNamesAddressInMemary[j]);printf("\t\t\t%s\t\t\t%d\n", str, LPexprotDir->Base+ *WPNameOrdinalsInMemary);}WPNameOrdinalsInMemary++;}WPNameOrdinalsInMemary = (PWORD)((char*)LPdosHeader + AddressOfNameOrdinalsFOA);LPFunctionsAddressInMemary++;}


http://www.mrgr.cn/news/46714.html

相关文章:

  • 《变形金刚-游戏》V1.0官方学习版
  • 实力认证 | 海云安入选《信创安全产品及服务购买决策参考》
  • android 启用lint检查
  • 邮票面值设计
  • 【Uniapp-Vue3】Prop校验与prop默认值用法及循环遍历数组对象
  • python循环结构(for)
  • 【hot100-java】二叉搜索树中第 K 小的元素
  • 内核编译 设备驱动 驱动程序
  • ARP欺骗
  • 小赢卡贷公益行:乡村振兴与多元公益并进
  • 保姆级教程 | Adobe Illustrator调整颜色透明度
  • C语言练习
  • SpringBoot实现电子文件签字+合同系统
  • 鸿蒙网络管理模块05——数据流量统计
  • java内存控制
  • CF B. Uniqueness
  • 腾讯云SDK连麦管理快速上手
  • Python绘制--绘制心形曲线
  • 线程与进程的区别与联系
  • 2023 CCPC哈尔滨 报告
  • 影刀RPA在智能客服上的运用
  • 接着上一篇stp 实验继续
  • 24.数据结构和算法-哈夫曼树及其应用(最优二叉树)
  • 机器学习入门(一)
  • ESP32-C3实现GPIO输入-判断高低电平
  • 图形学技术博客