導航:首頁 > 源碼編譯 > 怎麼看編譯器的代碼

怎麼看編譯器的代碼

發布時間:2022-12-20 05:27:17

❶ 怎麼才能看懂逆向代碼

程序都是以函數為一個單位。函數內的多條代碼使函數完成了特定的功能,在分析當中也是以一個函數作為一個分析單位。在分析時,應當盡可能多的分析出這個函數所完成的具體功能。
反匯編中的函數一般都有如下格式:
1.1 第一種函數格式
push ebp
mov esp,ebp
....
pop ebp
ret
1.2 第二種函數格式
這種函數沒有特定的格式,但可以肯定是在函數的末尾肯定有ret語句。
2、識別函數的返回值,形參,局部變數
函數一般是使用eax寄存器來保存返回值。但是一些編譯器可能用其他的方式來傳遞返回值,因此,在分析程序的前期,需要確定該程序是用什麼編譯器進行編譯的(通過PEId可以產看),才能確定其返回值是用什麼方式進行傳遞的。
函數的形參個數可以通過函數平衡多少位元組的棧空間來推理出。因為存在著許多的傳參方式,所以這種方法並不是絕對正確的,因此要先觀察出一個函數的傳參方式是何種方式。
和函數的傳參方式息息相關的函數調用方式:
不同的調用方式平衡堆棧的方式是不同的。C方式調用時,是調用者進行堆棧平衡。傳參時,一般是自右往左將實參入棧。在32位下實參一般是4個位元組一個,但也有例外的情況(比如傳遞一個結構體變數)。
在平衡堆棧時,一般是在函數調用語句後由調用者平衡堆棧。
例如:
call fun ; 調用一個函數
add esp , 4 ; 平衡堆棧.
stdCall 是被調用自己平衡
stdCall方式調用時, 形參入棧的方式和 C方式相同, 不同就在於平衡堆棧的形式. std方式調用是由被調用的函數自己本身來平衡堆棧也就是在函數返回的時候平衡堆棧.
ret 0x4 // stdCall平衡堆棧的實例
如果函數傳入形參每個都是 4個位元組的, 那麼就可以算出有多少個形參公式就是 :
形參個數 = 平衡堆棧用到的位元組數 / 4
函數形參在匯編語言中隨著調用方式不同其表現形式也跟著不同.
C方式和 std方式調用時,形參的表現形式為: [ebp+8] ,即 ebp+一個數字去索引.

❷ 如何查看C語言,內庫的源代碼

1、首先標准只是規定了這些函數的介面和具體的運行效率的要求,這些函數具體是怎麼寫得要看各個編譯器的實現和平台。
2、例如使用的編譯器是visual studio,微軟提供了一部分C運行時(CRT)的源碼,裡面會有memcpy,strcpy之類的函數的實現,在visual studio 2005下的路徑是C:\Program Files\Microsoft Visual Studio 8\VC\crt\src。

❸ 怎麼查看編譯器版本

你的是什麼編譯程序?
MYTC?
TC?
GCC?
GPP?
....

在VISUAL STUDIO命令提示里輸入

RC /?

第一行

Microsoft (R) Windows (R) Resource Compiler Version 5.2.3690.0

5.2.3690.0就是版本號了

❹ 如何通過STVD編譯器看自己的代碼量

下載一個小工具

1、把解開後的size.exe復制到COSMIC\CXSTM8文件夾,就是你的COSMIC編譯工具里有cpstm8.exe的那個文件夾。
2、在SVTD的Project->settings中打開Post-Build選項卡,在commands的最後一行加入:size $(OutputPath)$(TargetSName).map
3、保存返回,編譯試試,最後會出現如:Program Size: Code=12470 Eeprom=0 ZeroPage=227 Ram=180的結果。

思路:

打開map文件,統計各段的長度,然後輸出。

主要代碼:
static void Main(string[] args)

{

StreamReader sr = new StreamReader(args[0]);

string[] s;

char[] charSeparators = new char[] { ' ' };

int code_size = 0;

int zeropage_size = 0;

int ram_size = 0;

int eeprom_size = 0;

for (int i = 0; i < 8; i++)

{

string s1 = sr.ReadLine();

}

while (true)

{

string s1 = sr.ReadLine();

s = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);

if(s.Length == 0)

{

break;

}

else if (s[7] == ".text" || s[7] == ".const" || s[7] == ".init")

{

code_size += int.Parse(s[5]);

}

else if (s[7] == ".eeprom")

{

eeprom_size += int.Parse(s[5]);

}

else if (s[7] == ".bsct," && s[8] == "initialized")

{

zeropage_size += int.Parse(s[5]);

}

else if (s[7] == ".ubsct" || s[7] == ".share")

{

zeropage_size += int.Parse(s[5]);

}

else if (s[7] == ".data," && s[8] == "initialized")

{

ram_size += int.Parse(s[5]);

}

else if (s[7] == ".bss")

{

ram_size += int.Parse(s[5]);

}

}

Console.WriteLine(" ");

// Program Size: Code=5056 RO-data=288 RW-data=68 ZI-data=1140

Console.WriteLine("Program Size: Code=" + code_size.ToString() + " Eeprom=" + eeprom_size.ToString() + " ZeroPage=" + zeropage_size.ToString() + " Ram=" + ram_size.ToString());

❺ 編譯器的代碼分析

編譯器分析(compiler analysis)的對象是前端生成並傳遞過來的中間代碼,現代的優化型編譯器(optimizing compiler)常常用好幾種層次的中間代碼來表示程序,高層的中間代碼(high level IR)接近輸入的源程序的格式,與輸入語言相關(language dependent),包含更多的全局性的信息,和源程序的結構;中層的中間代碼(middle level IR)與輸入語言無關,低層的中間代碼(Low level IR)與機器語言類似。 不同的分析,優化發生在最適合的那一層中間代碼上。
常見的編譯分析有函數調用樹(call tree),控制流程圖(Control flow graph),以及在此基礎上的 變數定義-使用,使用-定義鏈(define-use/use-define or u-d/d-u chain),變數別名分析(alias analysis),指針分析(pointer analysis),數據依賴分析(data dependence analysis)等。
程序分析結果是編譯器優化(compiler optimization)和程序變形(compiler transformation)的前提條件。常見的優化和變形有:函數內嵌(inlining),無用代碼刪除(Dead code elimination),標准化循環結構(loop normalization),循環體展開(loop unrolling),循環體合並,分裂(loop fusion,loop fission),數組填充(array padding),等等。 優化和變形的目的是減少代碼的長度,提高內存(memory),緩存(cache)的使用率,減少讀寫磁碟,訪問網路數據的頻率。更高級的優化甚至可以把序列化的代碼(serial code)變成並行運算,多線程的代碼(parallelized,multi-threadedcode)。
機器代碼的生成是優化變型後的中間代碼轉換成機器指令的過程。現代編譯器主要採用生成匯編代碼(assembly code)的策略,而不直接生成二進制的目標代碼(binary object code)。即使在代碼生成階段,高級編譯器仍然要做很多分析,優化,變形的工作。例如如何分配寄存器(register allocatioin),如何選擇合適的機器指令(instruction selection),如何合並幾句代碼成一句等等。

❻ 如何看一個.exe文件的代碼

樓上純粹扯淡
.exe的代碼無論是什麼語言什麼編譯器的,都會先編譯成機器碼之後再鏈接,所以無論什麼軟體編寫的exe都是無法直接看到的,能看直接到的也只有exe裡面的數據段中的數據
樓上說的應該是可執行的腳本(.bat .cmd .vbs .js什麼的),那種玩意兒直接用記事本就可以看到代碼
看一個.exe文件的代碼就是傳說中的逆向工程,分為反編譯和反匯編,反編譯就是把機器碼還原成c++之類的源代碼,這個一般不太現實,
反匯編就是把.exe的代碼變成匯編源代碼(跟機器語言也差不了太多,但是比機器碼好理解得多)
進行反匯編需要反匯編工具,我所知的靜態反匯編工具就有IDA,
能進行動態跟蹤的就有大名鼎鼎的OllyDebug,一般這兩個就夠了,如果樓主不滿意可以去搜搜其它軟體

❼ c語言編譯器怎麼看結果啊

1、要點兩次按鈕,第一次是」編譯「按鈕,看有沒有提示出錯,提示沒出錯,才點「運行」按鈕,出錯要先改對了才能運行,點」運行「按鈕。

2、編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器 (Linker) → 可執行程序 (executables)。高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、java、漢語編程等或匯編語言,而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。

❽ 請問如何在myeclipse編譯器中查看java.class文件的源代碼為什麼我點擊這種文件都報 SOURCR NOT FOUND呢

在你eclipse中裝一個java反編譯器就能查看,.class文件的源代碼了

❾ 如何查看IAR編譯器編譯後的匯編代碼,我想知道這個編譯器是如何處理中斷的

編輯界面右擊工程點擊options菜單項,選擇c/c++ compiler選項卡中的list選項,勾選output assembler files,編譯後則生成離線匯編代碼文件。
調試界面下,點擊view / disassembly 菜單項,則顯示在線匯編代碼窗口。

❿ auto格式怎麼查看代碼

C++ Primer Plus (第六版 中文版 人民郵電出版社)》第九章:內存模型和名稱空間
"有關using編譯命令和using聲明,需要記住的一點是,他們增加了名稱沖突的可能性。"

一般說來,使用 using命令 比使用 using編譯命令 更安全,這是由於它只導入了制定的名稱。如果該名稱與局部名稱發生沖突,編譯器將發出指示。using編譯命令導入所有的名稱,包括可能並不需要的名稱。如果與局部名稱發生沖突,則局部名稱將覆蓋名稱空間版本,而編譯器並不會發出警告。另外,名稱空間的開放性意味著名稱空間的名稱可能分散在多個地方,這使得難以准確知道添加了哪些名稱。

閱讀全文

與怎麼看編譯器的代碼相關的資料

熱點內容
戰地聯盟3解壓密碼 瀏覽:803
s型命令 瀏覽:23
php年薪5年 瀏覽:67
如何上網上設個人加密賬戶 瀏覽:44
linux打開ssh服務 瀏覽:78
微信位置可以加密嗎 瀏覽:470
演算法蠻力法 瀏覽:438
隨機排練命令 瀏覽:147
python多進程並發 瀏覽:41
安卓軟體安裝如何躲避安全檢測 瀏覽:647
奇幻潮翡翠台源碼百度雲盤 瀏覽:187
什麼軟體可以免費pdf轉word 瀏覽:15
php正則表達式大全 瀏覽:394
androidntp時間 瀏覽:299
輪機長命令簿英文 瀏覽:148
oppo鈴聲設置被加密怎麼處理 瀏覽:548
粵苗app圖形驗證碼怎麼填 瀏覽:899
管家婆架設雲伺服器 瀏覽:254
php的登錄界面代碼 瀏覽:997
php開發客戶端 瀏覽:998