ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 22:17

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




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - マシン語を走らせる
作成者 メッセージ
  記事の件名:   引用付きで返信する
ナナシ様、補足をありがとうごさいます。

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

ですが前に私が使っていたパソコンで、hira様の「関数を実行する」方法が動かなかったのに、この関数ポインタの方法で動いたんですよね。
実行権限を与えていないのに動くということは
私が使っていたパソコンにはセキリティが付いていないということですよね。
ますます、hira様のコードが動かない理由がわからなくなりました。
新しいパソコンではhira様のコードが動いているので単純にOSの問題かも知れませんね。
投稿記事 Posted: 2005年9月09日(金) 12:47
  記事の件名:   引用付きで返信する
・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月05日(月) 00:04
  記事の件名:  マシン語を走らせる  引用付きで返信する
プログラムにマシン語を埋め込んでみます。

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

まず、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月04日(日) 14:28

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


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