初步的看一下C#窗体程序的直接反汇编代码
C#基本窗體程序;
進(jìn)入反匯編查看;
?
看一下把字符串賦給文本框的這段反匯編;?
大體的閱讀一下,以略懂匯編的人來看,基本含義:
? ? ebp寄存器的值減去一個值,取出此偏移地址的值,賦給eax;
? ? eax寄存器的值,加上一個值,取出此偏移地址的dword,賦給ecx;
? ? 取數(shù)據(jù)段某處的一個值,放入edx;
? ? 取出以ecx寄存器的值為偏移處的dword,放入eax;
? ? eax寄存器的值,再加上一個值,取出此偏移處的dword,又放入eax;
? ? 調(diào)用以eax的值為偏移處的函數(shù);
看上去很繞,最后eax寄存器的值是啥我也不知道;
字符串是放在棧(ebp所指),或是數(shù)據(jù)段(ds),匯編不熟悉不了解;
最后調(diào)用的地址處,莫非是Win32的SetDlgItemText類似函數(shù),文本框句柄在哪里?這些都是問題;
復(fù)習(xí)一下32位寄存器的基本用法;
? ??esp是棧指針,ebp只是存取某時刻的esp;
? ? EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。
? ? EBX 是"基地址"(base)寄存器, 在內(nèi)存尋址時存放基地址。
? ? ECX 是計數(shù)器(counter), 是重復(fù)(REP)前綴指令和LOOP指令的內(nèi)定計數(shù)器。
? ? EDX 則總是被用來放整數(shù)除法產(chǎn)生的余數(shù)。
? ? 加方括號 [ ] 表示一種間接的取操作數(shù)方式,有點類似于C語言中的指針概念;
ECX在這里應(yīng)該也沒有做為計數(shù)寄存器使用;
這段代碼和手寫的Win32匯編設(shè)置文本框值完全不同;
自己寫Win32匯編設(shè)置文本框值的程序在,
? ??Win32匯編獲取和設(shè)置文本框的內(nèi)容_bcbobo21cn的專欄-CSDN博客_win32設(shè)置文本框內(nèi)容
總之這段反匯編看上去比花指令還花;?肯定是微軟為了防止人跟蹤進(jìn)入dNet虛擬機(jī)的內(nèi)部、了解到其設(shè)計機(jī)制,而搞了一些東西;
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的初步的看一下C#窗体程序的直接反汇编代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言getch()函数学习
- 下一篇: 汇编LAHF指令学习 - 使用emu80