c语言反编译例子
文件有两种,一种是文本文件,一种是程序二进制文件,不管哪种文件都可以用十六进制编码来显示,称为hex文件。
1、文本Hex文件一般不需要转成C语言,更多的是程序二进制文件,用十六进制显示,可以转换成C语言,一般使用相应的反汇编程序来实现,这方面的工具很多,不同的平台略有不同。Windows平台一般常用的OllyDbg、Windbg、IDA,Linux平台使用最多的是GDB和Linux版的IDA。
OllyDbg,简称OD,一般是软件逆向工程爱好者,最先使用的一个工具,但是因为当下不在更新,所以一般用一般用于学习使用,下图中左上角的区域即为反汇编区域 ,用户可以根据汇编指令,分析程序算法,然后自己编写代码。
通过这个实例 ,相信应该能理解一个大致的流程啦。
❷ c语言生成的exe文件还能不能反编译成源程序
不能!!!!!!
只能人为的翻译。
没有这样的软件!!!!!!
如果要是能反编译,这个世界的程序员就全失业了!
❸ c语言的反编译问题
反编译源码——不可能——因为你的变量名全被舍弃,在编译时变成地址代码了。
❹ 用C语言编写了一个程序,源代码和工程文件都弄丢了,只剩下.exe的二进制程序文件。怎么反编译出.c
这个确实很困难。如果是DOS程序还好办,如果是Windows程序,其反汇编的工作量相当巨大。而且这仅是反汇编,得到的只是勉强能用的汇编代码,而从汇编代码再反工程到.C,真的是件很困难的事。程序简单还好办,复杂的就真是件费力的事了。放弃吧。
如果是自己写的程序,只要整个设计还记得,那就重新写一遍吧。
❺ 用C语言编写哈夫曼的编码能进行英文的的翻译和反编译 求注释详细 好用来学习
要求是相同的,不相同的地方就是涉及输入的地方,这个相信你可以自己解决的吧,
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
typedef struct
{
int weight;
int parent;
int left;
int right;
}hfmt;
typedef char*hfmcode;
void selectnode(hfmt *ht,int n,int *bt1,int *bt2)
{
int i;
hfmt *ht1,*ht2,*t;
ht1=ht2=NULL;
for(i=1;i<n+1;i++)
{
if(!ht[i].parent)
{
if(ht1==NULL)
{
ht1=ht+i;
continue;
}
if(ht2==NULL)
{
ht2=ht+i;
if(ht1->weight>ht2->weight)
{
t=ht2;
ht2=ht1;
ht1=t;
}
continue;
}
if(ht1&&ht2)
{
if(ht[i].weight<=ht1->weight)
{
ht2=ht1;
ht1=ht+i;
}
else if (ht[i].weight>ht1->weight)
{
ht2=ht+i;
}
}
}
}
if(ht1>ht2){
*bt2=ht1-ht;
*bt1=ht2-ht;
}
else{
*bt1=ht1-ht;
*bt2=ht2-ht;
}
}
void createtree(hfmt *ht,int n,int *w)
{
int i,m=2*n-1,bt1,bt2;
if(n<=1)return;
for(i=1;i<=n;++i)
{
ht[i].weight=w[i-1];
ht[i].parent=0;
ht[i].left=0;
ht[i].right=0;
}
for(;i<=m;i++)
{
ht[i].weight=0;
ht[i].parent=0;
ht[i].left=0;
ht[i].right=0;
}
for(i=n+1;i<=m;i++)
{
selectnode(ht,i-1,&bt1,&bt2);
ht[bt1].parent=i;
ht[bt2].parent=i;
ht[i].left=bt1;
ht[i].right=bt2;
ht[i].weight=ht[bt1].weight=ht[bt2].weight;
}
}
void hfmcoding(hfmt *ht,int n,hfmcode *hc)
{
char*cd;
int start ,i;
int current,parent;
cd=(char*)malloc(sizeof(char)*n);
cd[n-1]='