「メモリ上の機械語プログラム」の編集履歴(バックアップ)一覧はこちら
「メモリ上の機械語プログラム」(2010/01/30 (土) 22:59:23) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
参考→[[http://www.activebasic.com/forum/viewtopic.php?t=308]]
#asciiart(blockquote){
Function SetAsm(asm As *Byte, codesize As Long) As VoidPtr
SetAsm=VirtualAlloc(NULL, codesize, MEM_COMMIT, PAGE_EXECUTE_READWRITE) '追加
memcpy(SetAsm,asm,codesize)
End Function
Sub FreeAsm(func As VoidPtr)
VirtualFree(swap, 0, MEM_DECOMMIT or MEM_RELEASE) '追加
End Sub
'機械語コード(_stdcall)
Dim asm[ELM(40)]=[
&h55, &h8B, &hEC, &h51, &h8B, &h45, &h08, &h8B, &h08, &h89,
&h4D, &hFC, &h8B, &h55, &h08, &h8B, &h45, &h0C, &h8B, &h08,
&h89, &h0A, &h8B, &h55, &h0C, &h8B, &h45, &hFC, &h89, &h02,
&h8B, &hE5, &h5D, &hC2, &h08, &h00, &hCC, &hCC, &hCC, &hCC
] As Byte
'プロトタイプ
Dim swap As *Sub(p1 As *Long, p2 As *Long)
#N88BASIC
Dim a As Long, b As Long
swap = SetAsm(asm, ELM(40))
a=666:b=893
Print a;b
swap(VarPtr(a),VarPtr(b))
Print a;b
FreeAsm(swap)
}
参考→[[http://www.activebasic.com/forum/viewtopic.php?t=308]]
#asciiart(blockquote){
Function SetAsm(asm As *Byte, codesize As Long) As VoidPtr
SetAsm=VirtualAlloc(NULL, codesize, MEM_COMMIT, PAGE_EXECUTE_READWRITE) '追加
memcpy(SetAsm,asm,codesize)
End Function
Sub FreeAsm(func As VoidPtr)
VirtualFree(func, 0, MEM_DECOMMIT or MEM_RELEASE) '追加
End Sub
'機械語コード(_stdcall)
Dim asm[ELM(40)]=[
&h55, &h8B, &hEC, &h51, &h8B, &h45, &h08, &h8B, &h08, &h89,
&h4D, &hFC, &h8B, &h55, &h08, &h8B, &h45, &h0C, &h8B, &h08,
&h89, &h0A, &h8B, &h55, &h0C, &h8B, &h45, &hFC, &h89, &h02,
&h8B, &hE5, &h5D, &hC2, &h08, &h00, &hCC, &hCC, &hCC, &hCC
] As Byte
'プロトタイプ
Dim swap As *Sub(p1 As *Long, p2 As *Long)
#N88BASIC
Dim a As Long, b As Long
swap = SetAsm(asm, ELM(40))
a=666:b=893
Print a;b
swap(VarPtr(a),VarPtr(b))
Print a;b
FreeAsm(swap)
}