吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2207|回复: 3

[C/C++] 分享一个PE文件操作库

[复制链接]
李沉舟 发表于 2018-10-1 17:07 | 显示全部楼层 |阅读模式

本帖最后由 李沉舟 于 2018-10-1 17:37 编辑

GitHub地址:https://github.com/metoo10987/PEfile

我修改了一下,在PE::File类里加入了一个rva、va、offset地址互转成员函数。


uint32_t getaddr(uint32_t dwAddr, uint32_t from, uint32_t to); //转换地址类型

enum AddrType {vt_rva, vt_offset, vt_va}; //地址类型
const uint32_t ERROR_INVALID_ADDRESS = 1 << 29 | 100; //地址转换出错,设置异常代码,由get_err()、set_err()操作,注意最好不要直接用WINAPI或C库函数



地址转换函数我只写了x32 PE版本的。静态库我也只编译了x32版本的。

静态库下载: pefile.rar (320.88 KB, 下载次数: 2)

2.png

示例源代码。
[C] 纯文本查看 复制代码
#include "stdafx.h"

#pragma comment(lib, "PEFile.lib")

#include "PEFile.h"



int _tmain(int argc, _TCHAR* argv[])
{
        using namespace PE;
        File pe(L"C:\\WINDOWS\\system32\\notepad.exe", true);
        char szName[9] = {0};

        if (!pe.isLoaded())
        {
                printf("Can not open the pefile!\n");
                return 1;
        }

        

        for (int i = 0; i < pe.getNtHeaders32()->FileHeader.NumberOfSections; i++)
        {
                printf("Section %d >>\n", i + 1);
                memcpy(szName, pe.getSectionHeader(i)->Name, 8);
                printf("Name:%s\n", szName);
                printf("Offset:%08x\n", pe.getSectionHeader(i)->PointerToRawData);
                printf("VA:%08x\n", pe.getaddr(pe.getSectionHeader(i)->PointerToRawData, vt_offset, vt_va));
                printf("Size:%08x\n", pe.getSectionHeader(i)->SizeOfRawData);
        }



        system("pause");

        return 0;
}


评分

参与人数 6HB +29 THX +3 收起 理由
消逝的过去 + 2
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
agan8888 + 1
playboy + 2
syzh802618 + 3 + 1 [快捷评语] - 2018,狗年发发发,狗年旺旺旺!
Shark恒 + 20 + 1 [快捷评语] - 评分=感恩!简单却充满爱!感谢您的作品!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
2008ken 发表于 2018-10-1 21:19 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
syzh802618 发表于 2018-10-2 22:12 | 显示全部楼层

感谢楼主分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lyxc 发表于 2019-1-7 16:35 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表