プロが教えるわが家の防犯対策術!

char *buf;

_asm mov esi,buf
_asm mov [esi],0x77

bufの先頭アドレスが32ビットを超える位置にある場合に
32ビットしか扱わないコンパイラで可能にする記述を教えてください。

セグメントレジスタとは何でしょうか?

VC++でインラインアセンブラで記述します、よろしくお願いします。

A 回答 (6件)

> >・・・OSの役割を、・・・


> パソコンの基礎を学んでいない素人ですので、よろしくお願いします。

いや、逆ですよ。
やりたい事なために自分で学ばないといけないんです。
環境や人の性にしてはいけません。
そもそも、こんな所の基礎を教えてくれるところなんて情報工学系の大学くらいです。
※ それでも情報工学系の大学生の多くの人は、優秀な人を除いてちゃんと理解できているか怪しいですが。

基礎をすっとばすから訳が分からなくなるんです。
言い訳じゃなく、自分でやるべき事(OSとCPU動作を基礎から勉強)をやってください。
    • good
    • 0
この回答へのお礼

厳しいお言葉厳粛に受け止めさせて頂きます。
暇があればそうしたいのですが、あっと言う間もない人生の終りに近づくと焦ってしまい、かえって逆効果のようですね・・・ハイ。

お礼日時:2013/07/21 22:42

前から思っていたけど仮想記憶メモリ空間とかOSの役割を、まったく理解していないじゃないかなぁ。

    • good
    • 0
この回答へのお礼

>・・・OSの役割を、・・・

パソコンの基礎を学んでいない素人ですので、よろしくお願いします。

お礼日時:2013/07/21 22:06

>32bit用のレジスタの組み合わせで64bitのスコープを捕らえることはできないでしょうか?



アドレス空間が32bitしかないモードで動いてるのなら、何をどうやってもそれを超える空間にはアクセスできません(そんな空間あること自体わからないんだし)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
32bit環境で開発したアプリを64bit環境で動作させる場合を想定していましたが、他の方回答でよくわかりました。

お礼日時:2013/07/21 22:17

Windows64bitOSで32bitアプリケーションが動く場合は、WoW64配下で動きます。


この場合は、4GB分の仮想メモリしか割り当てられませんので、32bitの外と言うメモリ自体が割り当てられていません。
なので、想定が変なのです。
    • good
    • 0
この回答へのお礼

再度ありがとうございます。
専門的なことはわかりませんが、余計な事を考える必要はなかったようです。
ありがとうございました。

お礼日時:2013/07/21 22:03

32bitのモードで動く場合は機械語命令もアドレスが32bit空間に制限されます。


つまり前提に問題有り。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>32bit空間に制限
32bitアプリケーションが動作する場合はOSが判断して割り当てる変数アドレスは32bit以内の空間になると判断していいでしょうか?

お礼日時:2013/07/21 20:09

32ビットしか扱えないコンパイラが64ビットに関するもの(命令やレジスタ)を理解できるとは思えませんが。



>セグメントレジスタとは何でしょうか?

調べればわかること。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>調べればわかること
検索しましたが、内容がわかりません。

32bit用のレジスタの組み合わせで64bitのスコープを捕らえることはできないでしょうか?

例えば
__int64 II = offset *buf
int i = II / 2;
_asm mov esi,i
_asm mov ebx,esi
_asm mov eax,[esi+ebx]

変数割り当てのアラインで偶数番地となり、除算で端数はまずでないと思います。
この例で問題点があればご指摘ください。

お礼日時:2013/07/21 20:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!