簡體   English   中英

從文本文件 (.txt) 中讀取字節數組

[英]Read array of bytes from a text file (.txt)

我正在用 C++ 編寫程序,並且我有一個文本文件,其中包含我想在隨機進程的內存中掃描的模式/字節數組(我使用的是 Windows)。

File.txt:內容File.txt:

\x55\x8B\xEC\x83\x44\x0C\x7C\xDF

我設法讀取了這個字符串並用 printf() 完美地打印了它,但是當我將此字符串作為 const char* 傳遞給我的模式掃描函數時,它沒有在我說的隨機過程中返回函數的地址。

我做的一個奇怪的測試是這樣的:

DWORD function_address = findpattern(module_from_random_process_here, "\x55\x8B\xEC\x83\x44\x0C\x7C\xDF", mask);

->請注意,我在其中對我的模式進行了硬編碼,而不是使用我在File.txt閱讀的模式。

它返回了正確的內存地址,但是如果我把從我的File.txt讀取的模式放入,在我正在掃描的進程的內存中找不到該地址。 但問題是,當我打印從文本文件中讀取的模式時,它顯示正確!

另一件事:我也做了另一個測試,如果我從我的File.txt讀取掩碼並使用我在 findpattern 調用中讀取的掩碼,它就可以工作(只是模式“不工作”)。

有些事情讓我覺得這與將我的 File.txt 中的內容讀取為十六進制有關,但我在使其工作時遇到了問題。

信息:要讀取 File.txt 中的模式,我很簡單,使用std::ifstreamstd::geline(File.txt, strPattern)

讀取文件時,您應該始終考慮它的編碼。 文件中的不同字符可以解釋為不同的十六進制值。 例如,讓我們使用字符串 \\x55\\x8B。 它可以根據不同的編碼轉換為不同數量的字符。 如果您使用 8 位編碼,則可能是兩個字符,如果您決定使用 16 位編碼系統,則可能是 1 個字符。

如果我理解正確,您希望字符串 \\x55\\x8B 為 8 個字符。 如果是這樣,我們需要了解您的文件正在使用哪種編碼。 您寫道該文件包含字符串\\x55\\x8B\\xEC\\x83\\x44\\x0C\\x7C\\xDF 是二進制數據嗎? 是 utf-8 嗎? 也許是ascii? 每個選項都有不同的二進制表示。

編輯:根據注釋,您需要一個將 \\x65 的二進制值轉換為字符串“\\x65”的邏輯。 這可以用於:

int a = 0x65;
std::string str = "\\x" + std::to_string((a >> 4) & 0xFF) + std::to_string(a & 0x0F);

還在這里添加鑄造的另一面,也許這會很方便。 如果您需要將字符串 "\\x65" 轉換為其值,請使用以下命令:

std::string str= "\\x65";
std::stringstream ss;
int x;
ss << std::hex << str.substr(str.find('x')+1);
ss >> x;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM