1

私はCを初めて使用するので、「明らかな問題」についてお詫び申し上げます。

バッファで16進値のセットを検索しようとしています。複数のセットを検索する必要があるため、関数に入れようとしています。

これが私がこれまでに持っているコードです:

#define bin_buff_size (1024 * 1500)
unsigned char *bin_buff;
int i, hex_location, reset_i, hex_i, fix_location_1, buff_size;
unsigned char hex_string_search_1[] = {0x5e, 0x00, 0x75, 0x0d, 0x68, 0xb4, 0x2c, 0x63};

<other code here>

int get_location_from_buffer(unsigned char *needle, unsigned char *haystack, size_t haystack_size) {
    // Find the location of the hex-values in the buffer
    for (i = 0; i < haystack_size; i++) {
        // Reset hex_value because I will need to do this for multiple sets of hex values
        for (reset_i = 0; reset_i <= 7; reset_i++) {
            hex_value[reset_i] = 0x00;
          }

        // Set hex_value equal to the next section of the haystack
        for (hex_i = 0; hex_i <= 7; hex_i++) {
            hex_value[hex_i] = haystack[i + hex_i];
            printf("hex_value[%i] = %s\n",hex_i,hex_value[hex_i]); // Print the resulting hex-value for this sub-location
          }
        printf("hex_value = %s\n",hex_value);  // Print the entire hex_value

        // Check if needle equals haystack, and if so, return the resulting location
        if (needle == hex_value){
            printf("Found the first value at %i", i);
          }else{
            printf("Havent found the first value yet!\n");
          }
      }
    return i;
}


fix_location_1 = get_location_from_buffer(hex_string_search_1, bin_buff, buff_size);

私が抱えている問題は、これが私の出力であるということです。

hex_value[0] = (null)
hex_value[1] = (null)
hex_value[2] = (null)
hex_value[3] = (null)
hex_value[4] = (null)
hex_value[5] = (null)
hex_value[6] = (null)
hex_value[7] = (null)
hex_value =
Havent found the first value yet!
<The above is repeated multiple times>

次のようになります。

hex_value[hex_i] = haystack[i + hex_i];

私が思っているように、実際にはバッファからデータをプルしていません。誰かが私が間違っていることを指摘することができますか?

4

4 に答える 4

1
printf("hex_value[%i] = %s\n",hex_i,hex_value[hex_i]);

する必要があります

printf("hex_value[%i] = %x\n",hex_i,hex_value[hex_i]);

文字列ではなく、生の値を出力しています。

于 2012-06-18T18:44:57.437 に答える
1

いくつかの観察:

1) 1 つの問題は、"0x%02x" (または "$0x2x" など) を使用してバイナリ 16 進値を出力する必要があることです。「%s」の代わりに。16進バイナリ(単一値)ではなく、文字列(文字配列)を出力します。

2) "null" == "0" は、何も見つからないことを意味します。

3) Q: バッファを正しく初期化していますか?

4) よく見ていませんが、Q: あなたの検索アルゴリズムは確かですか?

5) Q: 再帰アルゴリズムを検討しますか?

ほんの少しの考え...

「それが役立つことを願っています...少なくとも少し

于 2012-06-18T18:53:40.913 に答える
0

この線

if (needle == hex_value){

これらのアドレスに格納されている値ではなく、2 つのアドレスを比較しています。その比較はあなたが望んでいるものではないと思います...

于 2012-06-18T19:21:01.503 に答える
0

コードにいくつかの問題があります。主な問題if (needle == hex_value)は、ポインターの内容ではなく、ポインターのみを比較することです。strncmp2 つの文字列の内容を比較するために使用します。

于 2012-06-18T19:11:24.047 に答える