ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 21:51

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
 記事の件名: マシン語を走らせる
投稿記事Posted: 2005年9月04日(日) 14:28 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
お住まい: 高知
プログラムにマシン語を埋め込んでみます。

ただし、マシン語とは言っても、
いわゆるプロシージャのみとなりますが。。。

まず、MASM32なんかでプロシージャ形式のマシン語の羅列を作成します。
※拡張子がBINのヤツに変換、リンカは16bit版でないとダメなようですが。。。
コード:
Dim asm[ELM(11)]=[&H55,&H8B,&HEC,&H8B,&H45,&H08,&H40,&HC9,&HC2,&H04,&H00] As Byte
続いて関数ポインタを作成します。
パラメータの個数や型はアセンブラで定義したものを指定。
このサンプルではパラメータに指定した値に+1(インクリメント)する関数です。
コード:
Dim Inc As *Function(p1 As Long) As Long
Inc=GlobalAlloc(GMEM_FIXED,11)
memcpy(Inc,asm,11)
Dim buf[255] As Byte
wsprintf(buf,"in=%d ret=%d",10,Inc(10))
GlobalFree(Inc)
MessageBox(NULL,buf,"",0)

P.S.
関数ポインタが導入されたのでお試し程度に作ってみたら
上手く動きました。

アセンブラをつついてみてコンパイラを作成することが如何に大変か
身にしみて分かりました。

そういう意味でも、ActiveBasicに感謝です。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年9月05日(月) 00:04 
オフライン

登録日時: 2005年6月19日(日) 21:21
記事: 11
お住まい: 石川県
・Windows XP Pro SP2 と Turion64 MT-30
・Windows XP Home SP2 と PentiumM 730
の組み合わせでデータ実行防止(DEP)が
作動することを確認しました。
(DEPの有効範囲を全プログラムに変更する必要あり)
その場合、次のようなコードに変更すると動くようになります。
コード:
Dim asm[ELM(11)]=[&H55,&H8B,&HEC,&H8B,&H45,&H08,&H40,&HC9,&HC2,&H04,&H00] As Byte
Dim Inc As *Function(p1 As Long) As Long
'Inc=GlobalAlloc(GMEM_FIXED,11)
Inc=VirtualAlloc(NULL, 11, MEM_COMMIT, PAGE_EXECUTE_READWRITE) '追加
memcpy(Inc,asm,11)
Dim buf[255] As Byte
wsprintf(buf,"in=%d ret=%d",10,Inc(10))
'GlobalFree(Inc)
VirtualFree(Inc, 0, MEM_DECOMMIT or MEM_RELEASE) '追加
MessageBox(NULL,buf,"",0) 
※データ実行防止
OSとCPUが両方対応している場合のみ有効です。
詳しくはhttp://www.google.co.jp/search?q=%E3%83 ... 2%E6%AD%A2


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年9月09日(金) 12:47 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
お住まい: 高知
ナナシ様、補足をありがとうごさいます。

以前、hira様と同様のお話をしたことがありました。
この実行権限を持つメモリ領域というのが面倒なんですよね。

ですが前に私が使っていたパソコンで、hira様の「関数を実行する」方法が動かなかったのに、この関数ポインタの方法で動いたんですよね。
実行権限を与えていないのに動くということは
私が使っていたパソコンにはセキリティが付いていないということですよね。
ますます、hira様のコードが動かない理由がわからなくなりました。
新しいパソコンではhira様のコードが動いているので単純にOSの問題かも知れませんね。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[18人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean