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

首頁 > 編程 > ASM > 正文

C# inline-asm / 嵌入x86匯編

2019-11-17 02:13:55
字體:
來源:轉載
供稿:網友
C# inline-asm / 嵌入x86匯編

C#可不可以嵌入匯編 可以 在我眼中C#作為一個介于中上層語言是不可能不可以

置入匯編代碼的 為什么會被我認為中上層語言呢 從C#保留指針就可以看出我知

道有很多人一定不會相信C#可以使用匯編代碼 不過C#會比較麻煩C#不可以直接

內聯匯編(inline-asm)準確的說C#只可以使用(auto-asm)動態匯編 這種技術不是

C#獨有的 易語言、VB、C++ 三種語言都可以 不過動態匯編我見過最多的是被應

用在外掛方面 及遠程匯編注入 實際上是屬于動態匯編技術的一種擴展不過很難

說JIT在編譯代碼后是通過在遠程把匯編代碼寫入托管進程執行的 又或者說是一種

寄生在外殼程序中運行的技術及“內存運行” 懶得討論這些一想到就頭大。

從上圖中你可以看見一份簡單的x86 / call匯編在C#中內嵌并被調用

執行一看你會發現并不是太難 我的一篇博文 寫了一大堆廢話就是說

這個東西不過是易語言的http://blog.csdn.net/u012395622/article/details/46400569

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

內存保護一般是PAGE_EXECUTE_READ及32不過經過我研究.NET上的

可執行代碼應該是PAGE_EXECUTE_READWIRTE及64 如果是P/invoke

上執行DLL中的保護是32 就可以我們在內嵌匯編時不可以使用只讀保護

如果我們需要使用由.NET去委托去Call那么必須是可讀可寫 如果通過Win32

API去Call那么使用32就可以 有些區別 、我曾研究過易語言上字節集在內存

中的內存保護到底是多少結果與C#是一致 4 / PAGE_READWRITE不過為什

么易語言可以CALL而C#不可以CALL一直是讓我感到較為迷惑的事情 可能是

托管堆與非托管堆之間不同造成的 不過我更希望有大神出來幫忙指點一下下。

由于是X86匯編 首先需要把目標平臺切換為x86 這樣才不會造成C#調用匯編

代碼時出錯 一定不要省略這個步驟

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

call dWord ptr[ebp+8] // call 參數一

[csharp]view plaincopy
  1. [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
  2. publicdelegateIntPtrCallMethod(IntPtrptr);

由于是在VC下內聯的匯編 最后移植到C# 一般在VC下函數的調用方式是cdcel

何況下面的是按照cdcel導出函數格式進行的 所以不可以使用__stdcall的方式

[csharp]view plaincopy
  1. [STAThread]
  2. staticvoidMain(string[]args)
  3. {
  4. byte[]buf_asm={
  5. //pushebp
  6. //movebp,esp
  7. //subesp,0C0h
  8. //pushebx
  9. //pushesi
  10. //pushedi
  11. //leaedi,[ebp-0C0h]
  12. //movecx,30h
  13. //moveax,0CCCCCCCCh
  14. //repstosdwordptres:[edi]
  15. 85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,
  16. 255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,
  17. //calldwordptr[ebp+8]
  18. 255,85,8,
  19. //popedi
  20. //popesi
  21. //popebx
  22. //movesp,ebp
  23. //popebp
  24. //ret
  25. 95,94,91,139,229,93,195
  26. };
  27. IntPtrptr_asm=SetHandleCount(buf_asm);
  28. VirtualPRotect(ptr_asm,buf_asm.Length);
  29. CallMethodcall_method=Marshal.GetDelegateForFunctionPointer(ptr_asm,typeof(CallMethod))asCallMethod;
  30. call_method(Marshal.GetFunctionPointerForDelegate(newAction(Hello_x86)));
  31. }

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

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

[csharp]view plaincopy
  1. staticvoidVirtualProtect(IntPtrptr,intsize)
  2. {
  3. intoutMemProtect;
  4. if(!VirtualProtect(ptr,size,64,outoutMemProtect))
  5. thrownewException("Unabletomodifymemoryprotection.");
  6. }

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

[csharp]view plaincopy
  1. staticvoidHello_x86()
  2. {
  3. Console.Title=((newStackFrame()).GetMethod()).Name;
  4. Console.WriteLine("Iwasx86assemblycallatestfunction.");
  5. Console.ReadKey(false);
  6. }

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

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

依賴的外部函數

[csharp]view plaincopy
  1. [DllImport("kernel32.dll",CharSet=CharSet.Auto)]
  2. publicstaticexternIntPtrSetHandleCount(byte[]value);
  3. [DllImport("kernel32.dll",SetLastError=true)]
  4. publicstaticexternboolVirtualProtect(IntPtrlpAddress,intdwSize,intflNewProtect,outintlpflOldProtect);

依賴的命名空間

[csharp]view plaincopy
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品视频免费播放| 日韩在线观看免费高清完整版| www.欧美三级电影.com| 久久久久免费视频| 日韩精品在线视频| 色婷婷久久av| 51视频国产精品一区二区| 亚洲欧美中文在线视频| 欧美丝袜一区二区| 国产精品青青在线观看爽香蕉| 奇米4444一区二区三区| 国产+人+亚洲| 日韩欧美在线观看视频| 日本一区二区三区四区视频| 欧美日韩在线观看视频| 亚洲人成网在线播放| 国产精品第七影院| 日本久久精品视频| 亚洲福利在线视频| 5566日本婷婷色中文字幕97| 成人黄色短视频在线观看| 久久中国妇女中文字幕| 日本精品中文字幕| 日韩福利在线播放| 欧美在线精品免播放器视频| 国产精品扒开腿做爽爽爽的视频| 久久久国产精品一区| 国产精品男人的天堂| 中文字幕在线国产精品| 欧美做受高潮1| 91高清视频在线免费观看| 国产精品久久婷婷六月丁香| 中文字幕亚洲第一| 欧美黑人巨大精品一区二区| 亚洲国产日韩一区| 人体精品一二三区| 一区二区三区无码高清视频| 成人观看高清在线观看免费| 日韩在线激情视频| 国产精品第三页| 欧美激情视频在线免费观看 欧美视频免费一| 日韩电影在线观看中文字幕| 日韩av高清不卡| 亚洲国产高清福利视频| 4444欧美成人kkkk| 97国产精品视频| 久久99亚洲精品| 伊人久久免费视频| 亚洲高清免费观看高清完整版| 91夜夜未满十八勿入爽爽影院| 韩国三级电影久久久久久| 精品国产一区二区三区久久狼黑人| 亚洲第一区在线| 亚洲成人在线视频播放| 伊人伊成久久人综合网小说| 亚洲国产第一页| 久久久精品国产一区二区| 久久久久这里只有精品| 久久久人成影片一区二区三区| 热草久综合在线| 中文字幕亚洲自拍| 日本欧美中文字幕| 成人在线观看视频网站| 隔壁老王国产在线精品| 在线观看欧美视频| 国产欧美韩国高清| 亚洲欧洲美洲在线综合| 国产欧亚日韩视频| 亚洲欧美日韩视频一区| 久久这里只有精品99| 国产精品白嫩初高中害羞小美女| 中文欧美日本在线资源| 国产精品1区2区在线观看| 国产不卡在线观看| 亚洲精品国精品久久99热一| 日韩精品高清在线| 国产日韩欧美日韩大片| 高清日韩电视剧大全免费播放在线观看| 欧美电影免费观看高清| 国产亚洲欧洲高清一区| 日韩av网站在线| 亚洲成在人线av| 欧美精品少妇videofree| 青青a在线精品免费观看| 亚洲综合av影视| 国产成人高清激情视频在线观看| 国产精品久久久久久久久久尿| 国产一区二区三区在线视频| 欧洲亚洲免费视频| 亚洲18私人小影院| 国产精品无码专区在线观看| 91精品国产高清久久久久久91| 日韩av三级在线观看| 亚洲国产天堂久久国产91| 日韩在线中文字| 精品国产一区二区三区久久久狼| 日韩亚洲欧美中文高清在线| 日韩中文理论片| 日韩av在线不卡| 亚洲综合成人婷婷小说| 亚洲有声小说3d| 色青青草原桃花久久综合| 亚洲福利精品在线| 另类图片亚洲另类| 国产欧美最新羞羞视频在线观看| 91久久国产婷婷一区二区| 亚洲男人天堂古典| 成人h片在线播放免费网站| 国产福利精品视频| 国产成人av在线播放| 中文字幕在线亚洲| 韩国三级电影久久久久久| 亚洲电影免费观看| 尤物精品国产第一福利三区| 国产日韩在线看片| 91精品国产91久久久久久久久| 国产精品欧美日韩一区二区| 国产精品福利无圣光在线一区| 精品少妇v888av| 成人做爰www免费看视频网站| 国产精品露脸av在线| 国产精品人成电影| 成人精品视频在线| 在线观看国产精品淫| 亚洲免费视频在线观看| 日韩午夜在线视频| 亚洲色图欧美制服丝袜另类第一页| 国产欧美日韩免费看aⅴ视频| 日韩美女视频免费看| 久久手机免费视频| 97av视频在线| 成人黄色中文字幕| 亚洲欧美中文字幕在线一区| 亚洲国产私拍精品国模在线观看| 欧美精品久久久久久久| 亚洲黄色av网站| 91日本在线视频| 欧美激情videoshd| 日韩av在线精品| 精品国产91乱高清在线观看| 538国产精品一区二区在线| 欧美xxxx做受欧美.88| 日韩欧美极品在线观看| 欧美日韩国产精品| 亚洲最大成人在线| 欧美性受xxxx白人性爽| 亚洲www视频| 久久91亚洲精品中文字幕奶水| 亚洲欧美国内爽妇网| 亚洲一区二区久久| 午夜精品一区二区三区在线视| 精品人伦一区二区三区蜜桃网站| 欧美视频一二三| 精品成人在线视频| 国产日韩av在线播放| 日韩在线观看网站| 97香蕉久久夜色精品国产| 欧美在线播放视频| 91产国在线观看动作片喷水| 911国产网站尤物在线观看| 精品偷拍一区二区三区在线看| 91精品视频免费看| 免费不卡欧美自拍视频| 久久久亚洲成人|