首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
逆向工程
发新帖
1
0
[分享]UnrealEngine 学习2: GName,GObject
发表于: 2026-3-11 00:13
1762
[分享]UnrealEngine 学习2: GName,GObject
mb_binusgki
2026-3-11 00:13
1762
# 前言 在 Unreal Engine(UE4/UE5) 的反射系统和对象系统中,经常会看到两个核心结构:GObjects、GNames,它们属于 UE 运行时最核心的全局数据结构,因此很多逆向、源码阅读、外挂分析都会从这里入手 # 一、GObject 是什么 GObjects 像是所有对象的仓库,本质是:UE 引擎中所有 UObject 实例的全局数组,UE 中所有对象都继承自 UObject,例如: ``` UObject ├─ UClass ├─ UWorld ├─ AActor │ ├─ APawn │ │ ├─ ACharacter │ │ │ └─ AShooterCharacter .... ``` 因此,只要是 UObject 派生对象:Actor、Component、Class、Blueprint、Texture、Material 全部都会被放进 GObjects 表里。 来看看代码是怎么实现的: 进入`Engine/Source/Runtime/CoreUObject/Public/UObject/UObjectArray.h`  发现这里引入了FUObjectArray GUObjectArray,继续寻找实例,进入`Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectHash.cpp`  可以看到注释里也说明了 这是个全局UObject数组实例,继续跟踪进入FUObjectArray  可以看到FUObjectArray类的TUObjectArray ObjObjects字段就是存储所有UObejct的地方,而TUObjectArray又是FFixedUObjectArray的重命名,继续跟踪FFixedUObjectArray  根据类型名猜测肯定是FUObjectItem* Objects,继续跟踪FUObjectItem  进入FUObjectItem已经看到其内部的class UObjectBase* Object(最底层对象) # 二、GName 是什么 GNames是UE的全局字符串表,UE里所有名字都不会直接存字符串,而是存索引。 原因是为了节省内存、快速比较以及统一管理(一般大型项目都会这么做) UE中对象名不是string,而是FName 在FName中重点有ComparisonIndex、Number这两个字段   - ComparisonIndex:字符串在GNames中的索引 - Number:重复编号 接下来继续由FName关联FNameEntry: 首先在FName中能找到NAME_INDEX ComparisonIndex;索引  通过索引关联到ComparisonIndex关联到FNameEntry的NAME_INDEX Index;,其中AnsiName、WideName就是存储的字符串,可存ansi或者宽字符  至于GName的位置,笔者目前还尚未找到,后续将持续补充...
传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!
#调试逆向
#系统底层
#其他内容
收藏
・
1
点赞
・
0
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
0
)
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
mb_binusgki
29
发帖
6
回帖
0
RANK
关注
私信
他的文章
[分享]注册表回调内核通信
379
[分享]简单编译器实现
1869
[分享]Lexer简单词法解析器入门
1233
[分享]vm解释器入门2
1288
[分享]vm解释器入门
1587
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部