注入されたDLLの内部からchar *にアクセスしようとしています。 しかし、どういうわけかprintf()をしたくない... ポインタが正しいです、私はそれを今日早く(奇妙なフォーマットを使っていました)印刷しました。char *からのprintfが機能しませんVS2013 C++
作品(それはポインタで何か間違っている必要があり?):
char* TestStr = "dsds";
printf("%s \n", TestStr);
は動作しません:
int ClientDll = (int)GetModuleHandleA("client.dll");
int RadarBase = *(int*)(ClientDll + 0x4E8395C);
int Temp = *(int*)(RadarBase + 0x14);
int LastText = *(int*)(Temp + 0x11C);//Getting the right pointer from memory
printf("%s \n", (char*)LastText);
文字列はヌルで終了しますか?それが "%s"が期待しているものです。また、このキャスティングはすべて役に立ちません。文字列を整数で出力し、最後のTextFieldが簡単なループになっているかどうかを確認し、今は 'printf'をスクラップしてください。次に、あなたは印刷するためにナンセンスに 'printf'を渡しているかどうか、あるいは整数シーケンスは実際には印刷可能なASCII文字のシーケンスであるかどうかを知るでしょう。あなたのタイトルに関しては、 'printf'が常に動作するので、誤解を招きます。問題は、あなたがそれを扱うために与えるものです。 – PaulMcKenzie
私のhexdumpによれば、これはそうであってはならない... '3C 00 66 00 6F 00 6E 00 74 00 20 00 63 00 6F 00 6C 00 6F 00 72 00 3D 00 22 00 23 00 66 00 66 00 64 00 66 00 39 00 33 00 22 00 3E 00' –
その16進数ダンプは、文字列が8ビットASCII文字ではなく16ビット文字を使用していることを示します。 "%s"は最初の0バイト*で停止し、最初に見えるのは '0x3C'の後です。この文字列には、0でないバイトのたびに点在する0バイトのために、ワイド文字列であるというすべての鳴りがあります。つまり、 'L'です。 ' '%s'を使った出力は、完全な文字列の代わりに単一の' <'を表示するはずでした。あなたの投稿でそれを導いたならば、エラーは他の人に明らかであったでしょう。 – PaulMcKenzie