>>951 いやバーチャルマシン作ってデバッグとか
先輩の残した遺産もあるしね
工学部だがCPUなんて作らなかった。
論理回路なら作った。
ダイオードは作ったな。
手作業でウェハ磨いたりドライヤーやホットプレート駆使
したり作業の一部はほとんど家庭料理だった。
1年ありゃあ、CPU作ってコンパイラ作ってその上でアプリまで動かせるだろ。
むしろアプリ先にありきでCPUのアーキ考えないとな。
最近ちょいとアセンブラに興味を持ち始めて、
VC++ 2008 のデバッグモードにて、空の関数
void Test()
{
}
をビルドして逆アセしてみたら、以下のようになりました。
?Test@@YAXXZ (void __cdecl Test(void)):
00000000: 55 push ebp
00000001: 8B EC mov ebp,esp
00000003: 81 EC C0 00 00 00 sub esp,0C0h
00000009: 53 push ebx
0000000A: 56 push esi
0000000B: 57 push edi
0000000C: 8D BD 40 FF FF FF lea edi,[ebp+FFFFFF40h]
00000012: B9 30 00 00 00 mov ecx,30h
00000017: B8 CC CC CC CC mov eax,0CCCCCCCCh
0000001C: F3 AB rep stos dword ptr es:[edi]
0000001E: 5F pop edi
0000001F: 5E pop esi
00000020: 5B pop ebx
00000021: 8B E5 mov esp,ebp
00000023: 5D pop ebp
00000024: C3 ret
↓続く
↑の続き
このアセンブリコードにて、3行目の
sub esp,0C0h
で、スタックポインタを192byteデクリメントした後に 0xCC で埋めてますが、
なぜ192byteを確保しているのか、理屈がよく分かりません。
また、上記の空関数に int の変数宣言を1つ追加するたびに、
スタックの確保サイズが、intのサイズ(4byte) ではなく、12byte ずつ増えるのですが、
なぜ 12byte なのか、これの理屈もよく分からず気になりました。
分かる方いらっしゃいましたら、よろしくお願いします。
デバッグのために追加されてる、と考えればいいじゃないか。
リリースモードでコンパイルしてdiff取ってみろよ
フフフフフフフフフ
>>957 ローカル変数のバッファオーバーラン検出用じゃないの?
>>956 CodeGear(旧Borland)のCodeGuaedでも似たような手法を使っている
ダミーデータを埋め込み、不正な書きこみ、例えば配列の添え字外の
書きこみなどを検出している
時々お節介な事もしてくれるが、ポインタ関係で悩ましいバグが取れない
時は重宝してるよ
>>961 >>962 ありがとうございます。
何か用途があるのかと思って調べてたので、スッキリしました。
964 :
デフォルトの名無しさん:2009/05/26(火) 21:28:27
IDAProで、
int main(void)
{
puts("は?ははは");
return0;
}
を逆アセンブったところ
Ollydbgでは
s=は?ははは
IDAProでは
db '0h'
db '0h'
みたいに続くのですが、これをs=は?ははは
のように見れませんか?
>>964 datarescueに問い合わせたら?
966 :
デフォルトの名無しさん:2009/05/30(土) 00:09:54
KUE-CHIP2で浮動少数点数同士の乗算をせよという課題が出たんですがさっぱりわかりません
親切な方いましたらよろしくお願いします
授業で手取り足取り教えてくれてるんだから、真面目に出て話し聞いてりゃいいじゃない。
資料だってあるんだから、見ながらやれば猿でもできる。
968 :
デフォルトの名無しさん:2009/06/04(木) 05:08:14
IDA-PROの日本語化パッチを公開したら皆さんは喜んでくれますか?
あんまり。
971 :
デフォルトの名無しさん:2009/06/12(金) 00:30:29
レジスタの中身をクリアする場合に、同一作者のソースの中でも
xor ax, ax
xor dx, dx
xor cx, cx
とするいっぽう、別のルーチンでは
mov dh, 0
mov si, 0
となっている実例がありました。他方、別の作者ですと、統一されていて、
レジスタクリアは、16bit一括で
xor di, di
xor cx, cx
としている方もいました。
どちらの方も90年〜93年くらい、ちょうどDOS円熟時代のウイルス作者なのですが、
ご本人がコメントを詳細に付けておられるんで、可読性を考えてmov ch, 0としたとは
あまり考えられないのですが…(個人的な見解ですが、アセンブラの勉強に、太古のウイルスの
ソースコードを追うのは大変有意義であると考えます)。
この件は、もしかしたらマシンサイクル?と関係しているのかなと思っているのですが、
こういった実行サイクル・クロックの有利不利に関する情報のあるWebサイト・書籍がありましたら
ご教示ください。個人的には、上記1番目の作者のものを改変するのであれば、
xor dh, dh
xor si, si
などとしたいところですが。昔、xor レジスタ、レジスタのほうがmov レジスタ、0よりも
実行サイクルが短い、みたいな記述をよくアセンブラ解説系のサイトで見かけたものですから…。
実機実行環境は、80386SX-16MHz/387/6MB RAM、MMX Pentium 200MHz/64MB RAMくらいです。
そりゃ8bit時代の話やね。いまどき1バイトや1クロック稼いでも意味無いしな。
あとRISCマシンならどっちも同じ命令とかよくある。
>>971 ふつーに考えて、可読性を考慮しているだけ。
movの方は引数、xorは単なる0clearだろうね。
もしかしたら、だけど、フラグを変化させないために、xorじゃなくてmovに
してるかもしれないけど。
975 :
971:2009/06/12(金) 09:47:21
>>972-974 回答ありがとうございます。
なるほどー、いろんな見方があるんですね。
>>972 たしかに現代の計算機ではたかが1クロック稼いだところでなんなの?って感じですけど、
コトは20年前の環境ですんで、悪しからず。開発マシンが386SXで、実行マシンが
286とか初代Pentium 133MHzとかなので。Pentiumだと、パイプライン?だかの影響で、
従前の8086的なアセンブラの記述・手法が逆に祟ってしまうことがある、とどこかで
読んだ記憶があります(はじめての〜80486だったか?)。
>>973 この場合の可読性ってのは、自分で後でパっとみて判るように、ってことでしょうかね。
コメントがびっしり拙い英文で書いてありますが(ネイティヴではない)、ゼロクリアに関しての
言及はなかったですから。
>>974 そうですか!確かに、mov命令ならフラグ変化をさせずに、という「利点」がありますね。
ウイルス作者もなかなかやりますねw あの当事の作者たちは、ある種の強者だったんでしょうか。
そんなソースを一体どこから?
直前にフラグを変化させる命令があって、その結果で分岐したいけど、
先にどうしてもレジスタをクリアしないといけないときぐらいしか利点が無い。
978 :
971:2009/06/12(金) 11:15:35
>>976 直リンは避けますが、Googleで"Virus Source Code Database"でぐぐれば、
ちょうど89年〜93年ころの、16Bitアセンブリソースコードが山ほどでてきますよ。
ほとんどは、オリジナル作者の解説がついてますんで、ルーチンを追うのも
さほど苦労はない感じです。COM/EXE Infector型とか、そういうのが主流でした。
あと、ディレクトリエントリぶっ壊したり、COMMAND.COMを書き換えたり、
ブートディスクのすべてのサブディレクトリを逐次探索して、そこのCOM/EXEに
ことごとく自分のウイルスヘッダ?をぶち込んで機能不全にし、撒き散らしたりとか、ですか。
でも、昨今のウイルスに比べれば、頑張って作っている様子はわかりますよ(苦笑
>>977 なるほど。
パッチ作るときに使ったな
xor以外にも、subでも同じゼロクリアできるな。
好みの問題だけどな。
あ、キャリーフラグが面倒かw
8086系以外のCPU使ってるとその辺は色々あっておもしろいぞw
ゼロクリア専用の命令があるのとかな。
x86でもfpuにはfld0とかfld1とかあって便利。
向こうの住人の了解が得られれば、いいと思います。
RISC系だと常に値が0のレジスタがあったりして mov %r0, %rxx みたいに
ゼロクリアしたりするな。
0レジスタ、実はHD6309にあったりする。
>>971 ウィルス検出パターンに引っかからないため、ってのはないかな?
987 :
デフォルトの名無しさん:2009/06/14(日) 01:25:56
ハッキング非公式マニュアルという書籍に載っているアセンブラは、
なんでそこで切る
検索すると「ハッキング非公式ガイド」という本はあるようだが
990 :
デフォルトの名無しさん:2009/06/14(日) 14:19:20
それです。
アセンブラを学ぶのに参考になりやすかい?
基礎も学ばずに応用をやろうだなんて…
ハッキングから学ぶのは非常ーに大変です
なんで厨はハッキングから入ろうとするの?
厨だから。
995 :
デフォルトの名無しさん:2009/06/15(月) 18:08:45
Vistaでdebugコマンドを打った後にqを打って16bitmodeにする作業を
.batによって自動化させるにはどのように記述すればいいですか?
q.txt
q
[EOF]
debug < q.txt
q<改行>
というファイル(q.txtとする)を作って、
バッチファイルでは、
debug < q.txt
とする。
q('A`)p
999 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
asm
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。