C++相談室 part105
■ このスレッドは過去ログ倉庫に格納されています
0682デフォルトの名無しさん
2013/10/21(月) 11:46:59.31>>677だとdeclspec(naked)やomit-frame-pointerがあるからかなり確実性が上がってるように見える
・プロローグコード無しならコードサイズはまず膨れない
・関数本体がjmp先って事でも無い限り、全部インラインアセンブリなのでコードの共有は無い
・スタック検査は無効化してあるので挿入されない
・コードを含む構造体の相対アクセスなのでコード自体を変更しないから問題ない
・PAGE_EXECUTE_READWRITEしてるので問題ない
分割ってのはMIPSだかの固定長命令セットで上位movと下位movに分割される奴だけど、
そういうCPUをサポートするんでも無ければ問題ない・・・けど符号拡張はx86でも起きるぞ。
MOV EAX,0xFFFFFFFFがOR EAX,-1に変形されるのなんて良くある事。
関数本体がjmp先にあるってケースくらいじゃないかな、677で怖いのは。
俺は、DWORD __declspec(naked) Func(DWORD){__asm{
cmp [esp+4],0
jnz J1
mov eax,offset L0
ret
J1: mov eax,offset LE0
sub eax,offset L0
ret
L0: コード本体
LE0:}}ってやって長さと位置もインラインアセンブリ中で求めてた。
■ このスレッドは過去ログ倉庫に格納されています