‘壹’ c语言怎么反编译啊,教教我
用ida
pro,这是市面上能买到的软件中最棒的反向工程软件。
你可以试试看,它配合插件甚至可以得到几乎乱真的C/C++伪码,甚至不用修改就能编译回去。
‘贰’ 用C语言写的程序怎么进行反编译
c语言写的程序一般很难反编译的,即使可以,也不可能得到源码的。编译的完成后已经转化为机器语言了,不是完全可逆的过程
‘叁’ c语言生成的exe文件还能不能反编译成源程序
不能!!!!!!
只能人为的翻译。
没有这样的软件!!!!!!
如果要是能反编译,这个世界的程序员就全失业了!
‘肆’ c语言怎么反编译啊,教教我
一般,在ide中选择单步调试就可以看到汇编代码.另外使用ollydbg或windbg都可以带源码调试.静态反汇编可以使用w32asm,或ida.
‘伍’ c语言的反编译问题
反编译源码——不可能——因为你的变量名全被舍弃,在编译时变成地址代码了。
‘陆’ 什么软件能将C语言的执行文件反汇编为汇编源代码
可以使用Linux下的objmp命令来反汇编。
常用命令:
objmp -x obj:以某种分类信息的形式把目标文件的数据组成输出;<可查到该文件的的所有动态库>
objmp -t obj:输出目标文件的符号表
objmp -h obj:输出目标文件的所有段概括
objmp -j ./text/.data -S obj:输出指定段的信息(反汇编源代码)
objmp -S obj:输出目标文件的符号表,当gcc -g时打印更明显
objmp -j .text -Sl stack1 | more
-S 尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,效果比较明显。隐含了-d参数。
-l 用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用
使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。
-j name 仅仅显示指定section的信息
‘柒’ c语言:原码,反码 补码
1)原码表示
原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。设有一数为x,则原码表示可记作[x]原。
例如,X1=
+1010110
X2=
一1001010
其原码记作:
[X1]原=[+1010110]原=01010110
[X2]原=[-1001010]原=11001010
在原码表示法中,对0有两种表示形式:
[+0]原=00000000
[-0]
原=10000000
2)补码表示
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作[X]补。
例如,[X1]=+1010110
[X2]=
一1001010
[X1]原=01010110
[X1]补=01010110
即
[X1]原=[X1]补=01010110
[X2]
原=
11001010
[X2]
补=10110101+1=10110110
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作[X]补。
例如,[X1]=+1010110
[X2]=
一1001010
[X1]原=01010110
[X1]补=01010110
即
[X1]原=[X1]补=01010110
[X2]
原=
11001010
[X2]
补=10110101+1=10110110
(3)反码表示法
机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。设有一数X,则X的反码表示记作[X]反。
例如:X1=
+1010110
X2=
一1001010
[X1]原=01010110
[X1]反=[X1]原=01010110
[X2]原=11001010
[X2]反=10110101
反码通常作为求补过程的中间形式,即在一个负数的反码的未位上加1,就得到了该负数的补码。
例1.
已知[X]原=10011010,求[X]补。
分析如下:
由[X]原求[X]补的原则是:若机器数为正数,则[X]原=[X]补;若机器数为负数,则该机器数的补码可对它的原码(符号位除外)所有位求反,再在未位加1而得到。现给定的机器数为负数,故有[X]补=[X]原十1,即
[X]原=10011010
[X]反=11100101+1
[X]补=11100110
例2.
已知[X]补=11100110,求[X]原。
分析如下:
对于机器数为正数,则[X]原=[X]补
对于机器数为负数,则有[X]原=[[X]补]补
现给定的为负数,故有:
[X]补=11100110
[[X]补]反=10011001+1
[[X]补]补=10011010=[X]原+1
[[X]补]补=10011010=[X]原
总结一下,原码(为负时,正时都不变)全部取反即得到反码,反码加
"1"就得到补码了,就是这么简单。