通过符号表找到系统未导出的函数地址源码

编译原理(十一)——抽象地址、符号表 一个标识符的语义信息含有三部分内容,种类 类型 抽象地址 种类可以分为:常量标识符、类型标识符、变量标识符、域名标识符、过函标识符 类型可以有:基本数据类型、子界、数组、枚举、结构体、集合、文件、指针等等 语义分析: 静态分析——静态语义 动态分析——动态语义 核心: 程序中是否有语义错误 在语义分析阶段要构建一个符号表为整个后序过程提供支持 一、抽象地址 1.1 地址分配 在进行编译的时候为每一个变量标识符都分配一个相对地址,当目标程序在真正运行的时候,一旦首地址确定下来,那么所有的变. 阅读详情
作 者: FlyToTheSpace

说明:第一步设置符号表路径.比如 E:/WINDOWS/system32/Symbols/
第二步指定系统动态库,比如user32.dll
第三步指定系统库函数名比如ValidateHwnd.
如果调用成功的话,返回值就为未导出的库函数地址.

例外说明.使用ollydbg设置好了符号表路径,好像是没有效果.
只有把符号文件放到系统目录/system32/symbols/里面才能加载.

class ProcedureAddrRetrieve
{
public:
  ProcedureAddrRetrieve(TCHAR *PdbSearchPath,DWORD _Options = NULL);
  ~ProcedureAddrRetrieve();
  BOOL LoadSymbol(TCHAR *DllName);
  BOOL EnumSymbol(TCHAR *pSearchMask = NULL);
  DWORD64 RetrieveAddr(TCHAR *_szProcedureName);
protected:
private:
  BOOL GetFileSize( const TCHAR* pFileName, DWORD& FileSize );
  static BOOL CALLBACK EnumSymbolsCallback( SYMBOL_INFO* pSymInfo, ULONG SymbolSize, PVOID UserContext );
  DWORD64 ModBase64;
  char szProcedureName[MAX_PATH];
  DWORD64 Address;
};
void test();

#include <windows.h>
#include <tchar.h>
#include <io.h>
#include <stdio.h>
#include <dbghelp.h>
#include <stdio.h>
#include "lib.h"
#pragma comment( lib, "dbghelp.lib" )
void test()
{
  ProcedureAddrRetrieve par("E://WINDOWS//system32//Symbols//");
  par.LoadSymbol("User32.dll");
  par.RetrieveAddr("ValidateHwnd");
}
ProcedureAddrRetrieve::ProcedureAddrRetrieve(TCHAR *PdbSearchPath,DWORD _Options )
{
  BOOL bRet = FALSE;
  ZeroMemory(this,sizeof(ProcedureAddrRetrieve));
  // Set options
  DWORD Options = SymGetOptions();

  // SYMOPT_DEBUG option asks DbgHelp to print additional troubleshooting
  // messages to debug output - use the debugger's Debug Output window
  // to view the messages

  Options =Options | SYMOPT_DEBUG | _Options/*|SYMOPT_ALLOW_ABSOLUTE_SYMBOLS*/;

 &n
c++ 查看库文件符号表 做个笔记: linux 下查看符号表工具:nm 操作如下:   linux的nm命令可以一个文件中的符号列表,列出以上代码Gcc -c编译出的a.o(a.a a.so)可以通过nm命令来查看其中的符号信息: 源码打印? 0000000000000000 t    0000000000000000 d    000000000000000 阅读详情

相关推荐

内核符号表的生成和查找过程

Linux内核中的函数名、全局变量等,都保存在一个全局的符号表中,本文介绍内核符号表的生成及查找过程。

落尘纷扰的专栏 9272

Frida框架中通过模块名和地址获取Module的方法及源码解析

这个Module对象包含了模块的基本信息,如模块名、加载到内存后的基地址、模块大小以及模块在设备上的实际路径等。在逆向工程和动态调试领域,Frida是一个强大的工具,它允许开发者进行实时的JavaScript交互式编程。此方法返回一个包含所有模块的数组,这对于未知系统函数来源的情况非常有用,通过对各个模块的导入表、导出表和符号表进行遍历,可以确定系统函数来自哪个.so文件及其具体地址。方法,两者的主要区别在于,当指定的模块不存在时,最后,Frida还提供了一个便捷的方法——在Frida的类型系统中,

beidideshu的博客 2484

Frida调用so函数失败?破解JNI函数名、导出与地址定位三大迷思

JNI函数是Android native层交互的核心机制,其调用涉及Java方法名、C函数实现名与ELF符号名三重映射。理解JNI_OnLoad注册流程、RegisterNatives动态绑定原理,是解决Frida无法通过Module.findExportByName定位函数的根本前提。技术价值在于绕过符号剥离(stripped so)、应对混淆加固、实现稳定native层协议分析。典型应用场景包括加密算法还原、登录凭证生成逆向、自动化测试中跳过Java封装直调so逻辑。本文聚焦实战中最高频的‘函数找不到’

weixin_33334142的博客 361

Linux内核中安全创建套接字:为何inet_create未导出及正确替代方案

当需要开发新协议(如专用传输层)时:.create = my_create_func, // 类似inet_create的自定义实现// 注册协议族适用场景:VPN驱动、定制化网络设备(如RDMA)、专有通信协议未导出是内核设计者有意为之的结果,核心动机包括:① 维护网络栈实现的封装性和可维护性;② 避免模块间非标准化依赖;③ 遵循最小权限原则保障安全457。如需类似功能,应优先调用已导出的高层 API(如)或通过系统调用触发内核合法路径48。

数字人生 239

RK3399平台开发系列讲解(内核入门篇)内核模块符号的导出

📢这里的符号主要指的是全局变量和函数。

内核笔记 577

SymbolTypeViewer:跨格式符号表查看与崩溃地址定位实战指南

符号表是二进制文件解析的基石,它记录了符号名、地址与类型信息的映射关系,在ELF、PE、Mach-O等格式中各有不同的组织形式。传统命令行工具如nm、readelf、objdump虽然功能强大,但在面对数万条符号时筛选效率低、C++符号demangle不便,难以快速定位崩溃地址或探索陌生库的导出接口。图形化的符号表查看器将繁杂的符号信息转化为可排序、可过滤、可跳转的表格,显著提升了逆向分析、嵌入式调试和大型C/C++工程维护的效率。本文从符号表的基本原理出发,介绍如何利用这类工具进行地址区间反向查询、符号类

weixin_33940469的博客 267

基于图神经网络的社交网络虚假账号检测系统 (Graph-based Fake Account Detection System, GFADS)

FOLLOWSRETWEETSSHAREDCOMMENTSLIKESMENTIONSUseruser_idusernamejoin_datebioavatar_urllocationverifiedis_fakeLOAD CSV这是决定模型性能的关键环节,需结合和。XXedge_indexy新账号缺乏历史数据和丰富关系。全网图可能包含数亿节点和数十亿边,难以直接训练。社交网络是动态变化的,虚假账号策略也在不断进化。获取大规模、高质量的真实/虚假账号标注数据非常困难。

Deng945201314的博客 1481

告别Keil,在Windows上用VSCode + arm-none-eabi-gcc + Makefile搭建国产MCU开发环境(附JLink配置避坑)

本文详细介绍了如何在Windows上使用VSCode、arm-none-eabi-gcc和Makefile搭建国产MCU开发环境,替代传统的Keil和IAR。内容涵盖工具链配置、工程结构设计、Makefile编写、VSCode集成调试以及高效开发工作流,特别针对国产MCU如复旦微FM33系列提供了优化方案和避坑指南。

weixin_28729205的博客 435

STM32G4系列数字LLC控制程序开发实战

本文详细介绍了基于STM32G4系列MCU的数字LLC控制程序开发全流程。从开发环境搭建、中断服务函数设计,到核心的电压环PID算法、Burst模式控制、状态机设计以及软启动优化,提供了完整的实战代码和关键参数调试经验,帮助开发者高效实现高性能数字电源控制。

weixin_29185493的博客 282

SAP FI模块实操:用F-28和F-32搞定客户回款与手动清账,别再让未清项报表一团糟

本文详细解析了SAP FI模块中F-28和F-32事务代码在客户回款与手动清账中的实操应用,帮助财务人员高效管理未清项报表。通过标准清账六步法和手动清账实战技巧,解决因操作不规范导致的账务混乱问题,提升应收账款管理效率。

weixin_30292843的博客 455

SDR 和 DDR 的区别

SDR 和 DDR 的差别,最明显提现在传输速率和频率上。DDR SDRAM与SDRAM的基本结构是相似的,最根本的区别在于DDR 支持在一个时钟周期内传输两次数据,,SDR 只能传输一次数据。

串起点滴 1961

10 SAP CPI header传参

我们在POSTMAN的Headers页签中,添加一个key为msg,value为炊烟袅袅。针对09中,现在固定传参"你好",如果要传其它的参数,我们需要在CPI中做一些处理。需要给Allowed Header(s)赋值,如果多个Header则以“|”隔开。这里写了固定值,需要替换为msg=${header.msg}这里日志打印的值就是POSTMAN中传输的值。保存,部署后,再次执行POSTMAN。保存,部署后,再次执行POSTMAN。保存,部署后,再次执行POSTMAN。返回失败,说明msg没有赋值成功。

SAP CPI 474

Python爬虫实战:手把手教你如何抓取农作物品种名录,构建标准化种业索引数据库!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 293

Transformer实战(32)——Transformer模型压缩

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担。我们介绍了如何通过蒸馏、剪枝和量化从训练好的模型中提取高效模型。预训练轻量级的通用语言模型(如 DistilBERT) 可以在各种任务上进行微调,并表现出与非蒸馏模型相当的性能。随着数据量的不断增加,我们希望模型能够更快地运行,在这方面,高效 Transformer 起着至关重要的作用。

盼小辉丶的博客 2617

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: autorun.inf完全操作手册
下一篇: 一种注入进程,获得完全操控的方法
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值