亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# 通過 inline-asm 解決嵌入x86匯編

2020-01-24 01:36:40
字體:
來源:轉載
供稿:網友

"嵌入"是指什么?資源?注入進程?如果是嵌入資源,那跟嵌入任何其他內容是一樣的,vs中只要拖拽就能完成嵌入資源。如果是注入進程,則必須得先將匯編碼轉為機器碼。雖然托管的C#也是能辦到,但這似乎是所有人都不推薦的方式。

C#可不可以嵌入匯編 可以 在我眼中C#作為一個介于中上層語言是不可能不可以置入匯編代碼的 為什么會被我認為中上層語言呢 從C#保留指針就可以看出 我知道有很多人一定不會相信C#可以使用匯編代碼

不過C#會比較麻煩C#不可以直接內聯匯編(inline-asm)準確的說C#只可以使用(auto-asm)動態匯編 這種技術不是

C#獨有的 易語言、VB、C++ 三種語言都可以 不過動態匯編我見過最多的是被應用在外掛方面 及遠程匯編注入 實際上是屬于動態匯編技術的一種擴展 不過很難說JIT在編譯代碼后是通過在遠程把匯編代碼寫入托管進程執行的 又或者說是一種寄生在外殼程序中運行的技術及“內存運行” 懶得討論這些一想到就頭大。

從上圖中你可以看見一份簡單的x86 / call匯編在C#中內嵌并被調用執行一看你會發現并不是太難 我的一篇博文 寫了一大堆廢話就是說這個東西不過是易語言的

我們知道軟件運行時所有代碼會放在虛擬內存中 而可執行的代碼在內存中

內存保護一般是PAGE_EXECUTE_READ及32不過經過我研究.NET上的可執行代碼應該是PAGE_EXECUTE_READWIRTE及64 如果是P/invoke上執行DLL中的保護是32 就可以我們在內嵌匯編時不可以使用只讀保護

如果我們需要使用由.NET去委托去Call那么必須是可讀可寫 如果通過Win32API去Call那么使用32就可以 有些區別 、我曾研究過易語言上字節集在內存中的內存保護到底是多少結果與C#是一致 4 / PAGE_READWRITE 不過為什么易語言可以CALL而C#不可以CALL一直是讓我感到較為迷惑的事情 可能是托管堆與非托管堆之間不同造成的 不過我更希望有大神出來幫忙指點一下下。

由于是X86匯編 首先需要把目標平臺切換為x86 這樣才不會造成C#調用匯編代碼時出錯 一定不要省略這個步驟

首先你需要定義一個有參數的委托 重點在于在匯編中有這樣一句話

call    dword ptr[ebp+8] // call 參數一[UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr CallMethod(IntPtr ptr); 

由于是在VC下內聯的匯編 最后移植到C# 一般在VC下函數的調用方式是cdcel
何況下面的是按照cdcel導出函數格式進行的 所以不可以使用__stdcall的方式

[STAThread] static void Main(string[] args) {   byte[] buf_asm = {     // push    ebp     // mov     ebp,esp     // sub     esp,0C0h     // push    ebx     // push    esi     // push    edi     // lea     edi,[ebp-0C0h]     // mov     ecx,30h     // mov     eax,0CCCCCCCCh     // rep stos  dword ptr es:[edi]     85, 139, 236, 129, 236, 192, 0, 0, 0, 83, 86, 87, 141, 189, 64,     255, 255, 255, 185, 48, 0, 0, 0, 184, 204, 204, 204, 204, 243, 171,     // call    dword ptr[ebp+8]     255, 85, 8,     // pop     edi     // pop     esi     // pop     ebx     // mov     esp,ebp     // pop     ebp     // ret     95, 94, 91, 139, 229, 93, 195   };   IntPtr ptr_asm = SetHandleCount(buf_asm);   VirtualProtect(ptr_asm, buf_asm.Length);   CallMethod call_method = Marshal.GetDelegateForFunctionPointer(ptr_asm, typeof(CallMethod)) as CallMethod;   call_method(Marshal.GetFunctionPointerForDelegate(new Action(Hello_x86))); } 

首先把你需要嵌入的匯編以字節數組的格式寫出來 然后通過

SetHandleCount函數是用于取地址指針的

 

static void VirtualProtect(IntPtr ptr, int size) {   int outMemProtect;   if (!VirtualProtect(ptr, size, 64, out outMemProtect))     throw new Exception("Unable to modify memory protection."); } 

上面的函數用于修改內存保護 不過是為了讓委托可以進行交互 包括匯編代碼可以被互調用

static void Hello_x86() {   Console.Title = ((new StackFrame()).GetMethod()).Name;   Console.WriteLine("I was x86 assembly call a test function.");   Console.ReadKey(false); } 

上面的函數是一個測試函數 這個函數沒有太大意義 只是表現利用了匯編調用

本函數 然后本函數輸出一個回應的信息 用于提示該函數被寫入內存匯編調用

依賴的外部函數

[DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SetHandleCount(byte[] value); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool VirtualProtect(IntPtr lpAddress, int dwSize, int flNewProtect, out int lpflOldProtect); 

依賴的命名空間

using System; using System.Runtime.InteropServices; using System.Diagnostics; 

通過inline-asm技術解決C#語言解決嵌入x86匯編,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产丝袜一区二区| 北条麻妃在线一区二区| 国产日韩欧美在线看| 国产99视频在线观看| 青青在线视频一区二区三区| 国产91精品黑色丝袜高跟鞋| 久久国产色av| 欧美猛男性生活免费| 日本在线观看天堂男亚洲| 91亚洲精品久久久久久久久久久久| 国产精品九九久久久久久久| 国产精品一区av| 欧美片一区二区三区| 日韩一区二区久久久| 深夜精品寂寞黄网站在线观看| 欧美激情中文字幕在线| 4k岛国日韩精品**专区| 日韩亚洲在线观看| 国产精品自产拍在线观看中文| 国产日产久久高清欧美一区| 久久精品国产亚洲精品2020| 欧美乱大交xxxxx| 国产一区二区丝袜高跟鞋图片| 欧美性极品xxxx娇小| 奇米四色中文综合久久| 亚洲精品自在久久| 国产精品久久久久久久久久| 亚州成人av在线| 久久69精品久久久久久国产越南| 亚洲另类图片色| 中文字幕亚洲图片| 欧美日韩另类视频| 97人人模人人爽人人喊中文字| 久久精品成人一区二区三区| 狠狠躁18三区二区一区| 在线播放日韩精品| 欧美日韩国产二区| 国产精品老女人精品视频| 91麻豆国产语对白在线观看| 欧美性猛交xxxx富婆| 日本中文字幕成人| 欧美激情在线观看| 国产成人97精品免费看片| 亚洲人av在线影院| 一区二区在线视频| 日韩电影在线观看永久视频免费网站| 欧美日韩一区二区三区| 亚洲男人的天堂在线播放| 国产精品欧美一区二区三区奶水| 欧美精品福利在线| 国产一区二区在线免费| 秋霞成人午夜鲁丝一区二区三区| 97超级碰在线看视频免费在线看| 欧美极品第一页| 高清欧美性猛交xxxx| 成人欧美一区二区三区黑人孕妇| 一区二区三区亚洲| 中文日韩在线视频| 国产精品极品美女粉嫩高清在线| 成人黄色av播放免费| 亚洲欧美另类在线观看| 欧美视频在线看| 视频在线观看99| 国产亚洲日本欧美韩国| 91国产精品视频在线| 国产精品久久久久久久久久小说| 欧美日韩精品在线观看| 国产在线观看不卡| 久久高清视频免费| 久久人人爽人人爽人人片av高清| 国产精品6699| 亚洲一区二区国产| 午夜精品福利在线观看| 97久久超碰福利国产精品…| 日韩av网站在线| 国产精品劲爆视频| 欧美日韩中文字幕| 九九久久综合网站| 亚洲欧美另类在线观看| 精品久久久久久久久久久久| 亚洲区bt下载| 午夜精品久久久久久99热| 久久精品成人欧美大片古装| 日韩欧美精品免费在线| 欧美性xxxxx极品娇小| 国产精品久久9| 亚洲黄色免费三级| 中文字幕精品国产| 国产91精品不卡视频| 日韩在线观看电影| 成人伊人精品色xxxx视频| 国产日本欧美在线观看| 91av网站在线播放| 欧美精品videossex性护士| 最新69国产成人精品视频免费| 欧美午夜久久久| yellow中文字幕久久| 日韩av一卡二卡| 国产日韩中文字幕| 精品国产一区二区三区久久狼黑人| 日日噜噜噜夜夜爽亚洲精品| 欧美极品美女视频网站在线观看免费| 中文字幕日韩精品有码视频| 色哟哟网站入口亚洲精品| 欧美日韩一区二区在线播放| 国产精品久久久久影院日本| 成人黄色av免费在线观看| 欧美大奶子在线| 亚洲第一福利网| 国产精品国产三级国产专播精品人| 亚洲国产精彩中文乱码av在线播放| 黑人巨大精品欧美一区免费视频| 69影院欧美专区视频| 欧美精品在线观看| 欧美成人精品在线视频| 欧美老女人在线视频| 91国自产精品中文字幕亚洲| 国产成人中文字幕| 高清一区二区三区日本久| 国产精品日韩欧美大师| 国产热re99久久6国产精品| 欧美日韩一区二区三区在线免费观看| 亚洲综合视频1区| 欧美性理论片在线观看片免费| 欧美激情一级精品国产| www.国产一区| 日本亚洲欧洲色| 色综合视频一区中文字幕| 国产精品久久久久久久9999| 韩国精品美女www爽爽爽视频| 亚洲天堂av综合网| 97人人做人人爱| 中文字幕一区二区三区电影| 国产精品色悠悠| 精品视频在线播放| 精品亚洲一区二区三区在线观看| 欧美一二三视频| 欧美日韩免费在线观看| 欧美日韩视频免费播放| 欧美激情精品久久久久久黑人| 久久久久亚洲精品成人网小说| 91亚洲国产成人精品性色| 欧美丰满老妇厨房牲生活| 欧美三级xxx| 国产一区二区三区在线观看视频| 国产视频亚洲视频| 国产精品久久久久久久久久ktv| 亚洲一区中文字幕| 在线视频日本亚洲性| 夜夜嗨av色一区二区不卡| 日韩网站在线观看| 亚洲国产欧美一区二区丝袜黑人| 中文字幕久精品免费视频| 亚洲午夜久久久影院| 91免费国产视频| 日韩欧美精品网站| 日韩免费在线电影| 欧美最近摘花xxxx摘花| 亚洲激情 国产| 欧美日韩国产在线看| 亚洲人成在线观看网站高清| 欧美日韩免费在线| 91在线视频精品| 国产精品亚洲欧美导航|