[過去ログ] くだらねえ質問はここに書き込め! Part 233 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
106
(3): 2018/09/21(金)14:04 ID:9h+3CzAA(1) AAS
Linux for AMD64でロングモードとして起動されたユーザープロセス内部でx86コードを実行することってできるのかな?
M$のせいかロング-互換モードの使用に関する情報になかなかたどりつけん
109
(1): 2018/09/21(金)23:31 ID:b53nuh9z(1/2) AAS
>>106
おそらくサポート外だろうが出来る。逆もできる。windowsでも出来る。ただ、既存の32bitライブラリをロードして使うには、多分ld.soとかlibc.soの改造が必要。
コードセグメント0x33が64bit、0x23が32bitで、これはamd64のlinuxやwindowsでは常に用意されている。だから、アセンブリではセグメント間のfar call/far jmp/far retを行えばよい。システムコールも使える。
これはwindowsでも同じだから、winのHeaven's Gateあたりが参考になると思う。
110
(1): 2018/09/21(金)23:33 ID:b53nuh9z(2/2) AAS
>>106
例: 以下のコードから
gcc -m64 -no-pie 6432.s
で64bitバイナリを作って実行

#ここから6432.s
.intel_syntax noprefix
.globl main
main:
.section .rodata
f: .ascii "test\n"
省18
118: 106 2018/09/23(日)16:12 ID:Q39ZeY2D(1) AAS
>>109-110
おぉーマジありがとう。一つ疑問が解決した
プロセッサレベルで64ビットモードと互換モードは容易に行き来できるらしいという情報まではたどり着けていたんだけど
OS上のユーザーアプリケーションレベルでそれができるか否かという情報がわからなかった

ちょっと長くなっちゃうけどやりたいことを書くと
 今時のプロセッサやOSが当たり前に持っている仮想メモリ機能を使って他32bitアーキテクチャ用ベアメタルコードをソースコードレベルで
デバッグできないかと考えた
 モニター用のコードはAMD64にコンパイルして4GBより上にロード、4GBより下にx86にコンパイルしたデバッグ対象のコードを展開して
別スレッドとして実行。I/Oレジスタ類はメモリマップドなのでページフォールトをハンドリングしてエミュレート(UNIX/Linux系なら
デバイスドライバを書いてmmapでマッピングしてエミュレートもできそう)
省7
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.224s*