http://www.cs.wright.edu/people/faculty/tkprasad/courses/cs781/alephOne.htmlの記事のようにスマッシュ スタッキング エクスプロイトを実行しようとしているときに、次のようにする必要があるという問題に遭遇しました。スタック ポインタを文字列に変換します。
(printf を使用して) int を 16 進形式で出力する方法は知っていますが、内部文字列表現として格納する方法は知りません。memcpy 関数に渡すことができるように、文字列として内部的に保存する必要があります。
私が必要とする理論上の関数は、以下の「convertFromIntToHexCharStar」です。
unsigned long NOPSledPointer = get_sp() + 150;
char * address = convertFromIntToHexCharStar(NOPSledPointer);
この関数を引数として使用することを意図しています。スタックポインタを提供します。
unsigned long get_sp(void) {
__asm__("movl %esp,%eax");
}
スタック ポインターを 16 進数の char* に変換したいので、次のように memcpy を実行できます。
char buffer[517];
/* Initialize buffer with 0x90 (NOP instruction) */
memset(&buffer, 0x90, 517);
/* Fill the buffer with appropriate contents here */
memcpy((void*) buffer, (void*) address, 4);
過去に機能したことがわかっているため、16 進数で表されたアドレスをメモリに入力する必要があります。
したがって、私が求めているのは、それを文字列に変換するか、この NOP スレッドを実行する別の簡単な方法 (これが私が解決しようとしている私の本当の問題です) のいずれかです。アドレスを複数回入力するつもりだったので、スタック上の戻りアドレスを上書きする可能性が高くなりますが、簡潔にするために、「アドレス」を「バッファー」に書き込むコードは 1 行だけにしました。
私はすでにstackoverflowとgoogleを検索しましたが、何も見つかりませんでした。よろしくお願いします。