c の例を次に示します。
#include <stdio.h>
#include <string.h>
void bad() {
printf("Oh shit really bad~!\r\n");
}
void foo() {
char overme[4] = "WOW";
*(int*)(overme+8) = (int)bad;
}
int main() {
foo();
}
c の例を次に示します。
#include <stdio.h>
#include <string.h>
void bad() {
printf("Oh shit really bad~!\r\n");
}
void foo() {
char overme[4] = "WOW";
*(int*)(overme+8) = (int)bad;
}
int main() {
foo();
}
Python と PHP が他の人が示唆するように解釈されるという事実は、実際には重要ではありません。ポイントは、それらが公開するほとんどすべての API と言語セマンティクスが厳密にエラー チェックされているため、悪用可能な未定義の動作が不可能になっているということです。言語をコンパイルしたとしても、それは不可能です。これは、何でもできる安全でない API を公開できなかったという意味ではありません。実際、Python の ctypes モジュールを使用すると、同様の動作を作成できるはずですが、偶然にそうするのは非常に困難です。
申し訳ありませんが、Pythonの弱点に到達しました。残念ながら、これは仕様によるものであるため、ほとんど何もできません。おそらくあなたはCにとどまるべきです。
Martinv.Löwisが言ったように:
Pythonはバッファオーバーフローをサポートしていません。申し訳ありません。
PSうわー。その投稿を読んだのは数ヶ月前のようですが、それでも7年1日が経ちました。
PHP はスクリプト言語であり、ポインターがなく、文字列型がバイナリセーフであるため、PHP ではこのようなことは機能しません。
しかし、なぜそのようなことをしたいのですか?
(ああ、バッファ オーバーフローを引き起こす PHP のバグがあるかもしれませんが、それは決して信頼できるものではなく、通常はすぐに修正されます...)
PHP で同様のことを行っても、同じ動作にはなりません。
PHP は解釈され、実行中の操作が有効かどうかを常にチェックします。したがって、たとえばバッファをオーバーランすることはできません。
PHP、Python、およびすべてのインタープリター言語は最初にインタープリターを通過する必要があり、メモリに完全にアクセスできないため、この種の言語では、投稿したコードのようなゲームを実行できません。