首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
经典问答
发新帖
2
0
汇编翻译为C代码可以吗?
发表于: 2010-12-8 11:05
5315
汇编翻译为C代码可以吗?
chinahanwu
2010-12-8 11:05
5315
本人最近在弄汇编翻译为C代码的程序,有点类似F5,但是有些问题没弄懂,请各位大侠帮助下。
假设源代码为 while (a && b) 那么程序流程应该是这样
<─┐
Run │
a─┐│
b─┼┘
<─┘
假设源代码为 if ( a || b ) 那么程序流程应该是这样
a─┐
b─┼┐
<─┘│
Run │
<──┘
但是下面的流程,我无论如何也想不到相对应的C代码
<─── ┐
Run │
a─┐ │
b─┼┐ │
c─┼┼─┤
<─┘│ │
d──┼─┘
<──┘
是否该汇编是无法转化为C语言的呢?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
收藏
・
2
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
11
)
小虾
雪 币:
2384
活跃值:
(766)
能力值:
(RANK:410 )
在线值:
发帖
36
回帖
2248
粉丝
7
关注
私信
小虾
10
2
楼
那个大概是这样的吧:
do
{
do
{
if (a)
{
......
}else if (b)
break;
}while (c)
break;
}while (d);
2010-12-8 11:49
0
chinahanwu
雪 币:
1231
活跃值:
(41)
能力值:
( LV2,RANK:10 )
在线值:
发帖
6
回帖
36
粉丝
0
关注
私信
chinahanwu
3
楼
这也是个很好的思路,不过 在判断 C 条件之后符合就Run 不符合就 break; 也就是跳出循环不在判断 break;也就是说永远也不会执行到 d 所以应该是错误的。如果按你的思路,应该是这样,不过要增加一个GOTO
do
{
do
{
Run
if (a)
{
break;
}
else if (b)
{
goto LABLE1;
}
}while (c)
}while (d);
LABLE1:
还有更简化的方案吗?
2010-12-8 12:10
0
小虾
雪 币:
2384
活跃值:
(766)
能力值:
(RANK:410 )
在线值:
发帖
36
回帖
2248
粉丝
7
关注
私信
小虾
10
4
楼
是的,你的表示方法才对。
2010-12-8 12:18
0
chinahanwu
雪 币:
1231
活跃值:
(41)
能力值:
( LV2,RANK:10 )
在线值:
发帖
6
回帖
36
粉丝
0
关注
私信
chinahanwu
5
楼
经过你的启发我发现了不能直接转为C语言的原因了,一个break只能跳出一重循环,不能跳出两重循环,所以也只有GOTO了。
2010-12-8 12:19
0
小虾
雪 币:
2384
活跃值:
(766)
能力值:
(RANK:410 )
在线值:
发帖
36
回帖
2248
粉丝
7
关注
私信
小虾
10
6
楼
是的,C语言中没有跳出两重循环的语句,只有使用goto或者如果d之后是函数返回的话也可以直接使用return直接退出。
2010-12-8 12:24
0
hjjdebug
雪 币:
107
活跃值:
(12)
能力值:
( LV8,RANK:130 )
在线值:
发帖
8
回帖
74
粉丝
0
关注
私信
hjjdebug
3
7
楼
c 语言写的代码,可以翻译为C,
不是c 语言的代码,例如直接用汇编写的代码,则不一定能翻译成C.
所以说,C 语言的代码结构只是程序结构的一个子集。 并不是完备的。
汇编是完备的,它可以做任何事情,例如它可以直接操纵I/O 而C 不能,同时它可以是无结构的。
2010-12-8 12:42
0
sltpgm
雪 币:
83
活跃值:
(40)
能力值:
( LV3,RANK:20 )
在线值:
发帖
11
回帖
101
粉丝
0
关注
私信
sltpgm
8
楼
记得好像一本C语言的书(忘了是哪个了)上就专门说过goto语句,一般不推荐使用,滥用goto跳转会使程序逻辑混乱,
但是从C语言的编译器一直到C++、C#都是支持goto语句的,最新的VS2010都支持,并没有把goto废除,
因为某些特殊情况下不用goto是很复杂的,偶尔用一下goto有时候能使程序简化,
书上举的例子好像是3重循环,要从里面跳出2重循环,
2010-12-8 13:38
0
edaboy
雪 币:
108
活跃值:
(27)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
39
粉丝
0
关注
私信
edaboy
9
楼
实在处理不了的就用asm("");
2010-12-8 13:42
0
chinahanwu
雪 币:
1231
活跃值:
(41)
能力值:
( LV2,RANK:10 )
在线值:
发帖
6
回帖
36
粉丝
0
关注
私信
chinahanwu
10
楼
谢谢各位大牛了,结贴。
2010-12-8 13:45
0
sltpgm
雪 币:
83
活跃值:
(40)
能力值:
( LV3,RANK:20 )
在线值:
发帖
11
回帖
101
粉丝
0
关注
私信
sltpgm
11
楼
C语言可以内嵌汇编,或者还可以直接用shellcode,
你去看linux的源代码,连操作系统都能写还有什么是不能做到的?
2010-12-8 13:47
0
高军
雪 币:
322
活跃值:
(113)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
204
粉丝
0
关注
私信
高军
12
楼
关注一下!!
2010-12-8 14:02
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
chinahanwu
6
发帖
36
回帖
10
RANK
关注
私信
他的文章
[原创]WTDebug 可以运行跟踪的注入型调试器
5775
[原创]WindTrudging开发手记之语法分析
8312
[原创]WindTrudging反汇编跟踪OD插件
15653
汇编翻译为C代码可以吗?
5316
[求助]简单的语法分析
3952
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部