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]='