编程黑洞网
首页
编程
数据库
代码审查
网络应用
Android
wordpress
软件推荐
软件工程
逆向工程
信息安全
软件质量测试
地理信息
密码学
网站管理员
元堆栈交换
网络工程
操作系统
Ubuntu
计算机
Unix和Linux
服务器故障
Vi和Vim
运维
物联网
机器人
树莓派
计算机图形学
信号处理
有没有办法从编译的代码中恢复宏?
逆向工程
|
2020-12-30
|
编程黑洞网
|
0条评论
|
242 人阅读
我一直在考虑将我现有的一些固件恢复原状。固件的一个特征是它使用许多预处理器宏进行编译。现在,据我所知,这些都不包含在二进制文件中,因此反编译器无法帮助解决这些问题。有什么办法可以恢复这些?有一种已知的技术可以推断它们的存在吗?
评论
尽管答案似乎是权威的“否”,但我不认为为什么不能编写这样的翻译系统至少要费劲。从本质上讲,这可以看作是文本替换,这种替换有时是可逆的。如果我的宏替换了“ abc”->“ x”和“ def”->“ x”,那么当我看到“ x”时,它可能是“ abc”或“ def”或仅仅是“ x”。坏。但是实际上,它以另一种方式起作用,即更大,更独特的字符串通常位于右侧。因此,我想可能会检测到某些情况。
当我写这篇文章时,我从启发式的角度思考了更多,例如,如果您看到一段代码似乎以与编译器处理宏的方式一致的方式被复制了。回想起来,这将是很难/不可能的。
#1 楼
不能。反编译器可以在其其他功能之上包括特殊的模式匹配启发式算法,以检测宏,但总的来说,宏只是由编译器以与其他代码相同的方式处理的代码。可能会对它们进行外观转换的优化,例如恒定传播,消除死代码,消除常见子表达式,循环不变代码运动等,这意味着它们可能不会以易于巩固的句法模式表现出来,被匹配。您的选择基本上是为反编译器编写一个post-pass(例如Hex-Rays插件)或手动识别宏。
评论
您也可能会忘记条件编译。
–锑
2013年6月1日2:47
#2 楼
否。宏是您已命名的代码段。在编译时,编译器遇到宏时,它只是将其替换为背后的代码,然后继续进行编译。
将十六进制字节粘贴到IDA Pro十六进制视图中
摩托罗拉68000系列处理器是否有用于将原始二进制文件反编译为C代码的工具?
标签列表
java
(11)
r
(3)
r-faq
(3)
javascript
(17)
jquery
(3)
asynchronous
(2)
php
(17)
mysql
(7)
sql
(3)
html
(2)
regex
(2)
arrays
(2)
variables
(3)
warnings
(2)
language-agnostic
(2)
c++
(9)
c++-faq
(8)
parsing
(2)
debugging
(5)
c
(3)
error-handling
(3)
python
(10)
pandas
(3)
android
(3)
list
(3)
最近发表
IP地址错误的错误掩码
在Cisco IOS中自动进行配置备份(每分钟)
VRRP和HSRP有什么区别?
IP地址如何映射到MAC地址?
网站可以识别我的MAC地址吗?
在STP中如何选择根桥?
为什么要使用三根以太网电缆将交换机连接到路由器?
为什么10.1.255.255是无效的广播地址?
为什么将IP地址分配给每个接口而不是设备?这将意味着什么?
为什么Visual Studio 2013不愿意运行我的Web性能/负载测试?
对测试代码了解太多会不利吗?
如何隔离错误?
如何使用Selenium和WebDriver清除localStorage
评估测试项目
我如何说服管理层我们需要一个正式的质量保证部门?
FluentWait与WebDriverWait有何不同?
简历和求职建议-从开发到测试的职业转变
您如何等待Selenium 2中的jQuery Ajax调用完成
在持续开发下测试应用程序
Selenium的页面加载默认超时是多少?
IT项目中软件测试的真正商业价值是什么?
系统测试与系统集成测试(SIT)有何不同?
如何找到我们的“质量保证流程”的弱点?
测试人员应如何处理生产中发现的错误?
如果我不使用TDD但想过渡到敏捷,那我应该回去创建那些单元测试吗?
代码覆盖率和测试覆盖率有什么区别?
当团队想要忽略关键但难以重现的错误时,我应该如何应对
测试人员应该修复错误吗?
审核测试自动化代码的良好实践
质量检查人员应该能够编写测试代码吗?
随机文章
将tmux窗格移至窗口
从Google Play音乐打印播放列表
吊死男人的正确方法
在Windows PC上仿真
确定要使用哪种插值方法对栅格数据进行重采样?
通过CALMS范式优化DevOps招聘流程的方法?
通过MQTT通过Raspberry Pi控制ESP8266
如何避免被更强大的贡献者分叉?
跟踪无效的源Mac地址
在Cisco IOS NAT中打开一系列TCP端口
评论
尽管答案似乎是权威的“否”,但我不认为为什么不能编写这样的翻译系统至少要费劲。从本质上讲,这可以看作是文本替换,这种替换有时是可逆的。如果我的宏替换了“ abc”->“ x”和“ def”->“ x”,那么当我看到“ x”时,它可能是“ abc”或“ def”或仅仅是“ x”。坏。但是实际上,它以另一种方式起作用,即更大,更独特的字符串通常位于右侧。因此,我想可能会检测到某些情况。当我写这篇文章时,我从启发式的角度思考了更多,例如,如果您看到一段代码似乎以与编译器处理宏的方式一致的方式被复制了。回想起来,这将是很难/不可能的。