我們知道的匯編可以轉換成機器碼來置入代碼中。比如:
asm
db $50, $8D, $80, $11, $44, $33, $00, $8D, $80, $11, $44, $33, $00, $58
end;
這就是把一段機器碼置入到了代碼中。可是目前遇到一個問題就是:
我需要置入一段匯編代碼,如果轉換成置入代碼的話,可能有上萬個位元組,C++里面可以通過類來參考,請問Delphi遇到這種情況,該怎么弄呢?
感謝!
uj5u.com熱心網友回復:
直接寫進去的話恐怕IDE都會卡死,對delphi又不是太精通,只能來詢問各位老師了uj5u.com熱心網友回復:
主要就是匯編代碼置入這一塊實在不知道該怎么辦了,難道封裝動態庫嗎?uj5u.com熱心網友回復:
老師們在嗎????uj5u.com熱心網友回復:
直接寫匯編指令,如asm
mov esi, eax
mov edi, edx
...
end
uj5u.com熱心網友回復:
不太了解這部分。但是樓主的例子只是放資料,這個可不是一定要用匯編的喔,隨便什么方式應該都是一樣的效果。重點是如何獲取資料的起始地址uj5u.com熱心網友回復:
直接放在資源里,運行時復制到運行地址即可。不過我很好奇的是“C++里面可以通過類來參考”是什么鬼?來個栗子~~~uj5u.com熱心網友回復:
我大概明白了,他的意思是位元組太多一個個輸入效率太差了. 用工具轉換一就OK了, 把檔案轉成delphi的位元組陣列源代碼uj5u.com熱心網友回復:
修改一下檔案格式,也可以當作類參考。用masm32等編譯成dll,然后正常呼叫。
或者
去他媽的 996.icu
uj5u.com熱心網友回復:
這種事情好說啊,干過類似的事情。直接寫個binToPas的工具即可。
把任何代碼或者二進制東西轉成asm 的DB指令。
當然如果好幾MB的資料也是可以編譯的,但最好不要打開編輯,會非常卡頓。
uj5u.com熱心網友回復:
為什么不直接定義一個 INC 檔案,把代碼組織成一個位元組陣列常數,用指標來呼叫里頭的入口:const
MyASMData: array [0..$3ffffff] of BYTE = ($XX, $XX ....);
單元程式(xxx.pas)
implementation
{$INCLUDE MYASM.INC}
var
AsmEntry00: Pointer = @MyASMData; ...
uj5u.com熱心網友回復:
樓上幾個方法都可以。還有把匯編編譯成中間obj檔案,然后在DELPHI里連接uj5u.com熱心網友回復:
上萬位元組,還是單獨封裝好用些。非常集成到一起編譯一話,10樓的方法不錯,Include.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/11161.html
上一篇:關于jieba庫的安裝與運行
