标签: binary

实现我自己的“字符串”工具——GNU 字符串找到的缺失序列

我想以编程方式读取二进制文件中的文本/字符串。

我的目标的确切替代方案是stringsLinux 中的shell 命令。

当我运行strings -n 4 /bin/ddshell 命令时,它会打印 818 行文本。

如何像strings命令一样找到二进制中的所有字符串?


我的代码在找到 EOF 后使用read代替fgetc并为其余文本添加了打印块。

它可以在 中找到 813 个单词/bin/dd,但仍然strings可以找到 818 个单词。有什么区别?

另一个问题; 您能建议此代码的性能改进吗?我想read(1)不是最快的方法。

最新更新代码

#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
#include <fcntl.h>

bool isPrintable(unsigned char c)
{
    if(c >= 0x20 && c <= 0x7e || c == 0x09)
    {
        return true;
    }
    return false;
}

int main(int argc, char * argv [])
{
    char …
Run Code Online (Sandbox Code Playgroud)

c linux string binary shell

0
推荐指数
1
解决办法
330
查看次数

在 Python 中浮动到二进制和二进制到浮动

谁能告诉我如何在python中将浮点数转换为32位二进制字符串以及从32位二进制字符串转换为浮点数?

python 中的“bin”函数仅适用于整数。

我需要一个单比特字符串作为内部表示。我不希望小数位前后的数字有单独的位串,小数位之间由小数位连接。

编辑:标记的问题没有解释如何将二进制字符串转换为浮回。

floating-point binary python-3.x

0
推荐指数
1
解决办法
7898
查看次数

你如何将一个整数转换成它的 CONDENSED 二进制等价物,例如 MySQL 中的 BINARY(3)

我正在执行散列操作,我需要一致、准确、高效地附加原始字节等。
我不能乱用 ASCII 编码的数字字符串,我只需要获取原始字节。

MySQL 的转换函数非常混乱,并且不会产生对像我这样的 SQL Server 人员来说显而易见的结果。

例如,BINARY 123456生成 6 个字符的 ASCII 编码字符串,而不是看似明显的BINARY ( 3 )字符串00000001 11100010 01000000aka0x01E240

到目前为止,我可以获得正确转换的唯一方法是分配一个十六进制文字 - 这在运行时显然是不切实际的。

SET @int_value = 123456 ;   -- Decimal value

SET @hex_value = 0x01E240 ; -- The same value, in hexadecimal,
                            -- 6 hex digits = 3 bytes

SELECT LENGTH ( BINARY @int_value ) , LENGTH ( BINARY @hex_value ) , LENGTH ( BINARY HEX ( @int_value ) ) ;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

那么在这个例子中,我如何将一个整数值(例如DECLARE …

mysql sql binary type-conversion data-conversion

0
推荐指数
1
解决办法
414
查看次数

如何简化switch语句

我有一个解码器函数,它需要一个字节片和 reflect.Kind并返回一个接口和一个错误。接口在代码的其他部分使用时将被断言。有没有办法简化我的 switch 语句,这样我就不必在每种情况下重复 NewReader、Read 和错误处理?

我现在所拥有的:

func decoder(byteValue []byte, t reflect.Kind) (interface{}, error) {
    switch t {
    case reflect.Int16:
        var ret int16
        buf := bytes.NewReader(byteValue)
        err := binary.Read(buf, binary.BigEndian, &ret)
        if err != nil {
            return 0, err
        }
        return ret, nil
    case reflect.Int32:
        var ret int32
        buf := bytes.NewReader(byteValue)
        err := binary.Read(buf, binary.BigEndian, &ret)
        if err != nil {
            return 0, err
        }
        return ret, nil
    }
}
Run Code Online (Sandbox Code Playgroud)

我在找什么:

func decoder(byteValue []byte, t reflect.Kind) (interface{}, error) { …
Run Code Online (Sandbox Code Playgroud)

binary byte go switch-statement reflect

0
推荐指数
1
解决办法
95
查看次数

比较“A”、“C”、“G”、“T”字符的最快方法

我希望提高我的生物信息学算法的速度,这需要比较“A”、“C”、“G”、“T”之一的字符(例如计算“A”==“C”)

由于字符的大小为 8 位,因此在最坏的情况下需要对二进制数进行 8 次比较。我的猜测是,通过将 'A'、'C'、'G'、'T' 表示为一对二进制数(例如,将 'A' 表示为 make_pair(false,false)),我想我可以提高速度3~4 次,因为它现在最多只需要 2 次二进制比较。

我尝试使用一对布尔值,但速度实际上下降了大约 30%。

表示四个字符和计算相等性的最快方法是什么?内存使用对我来说并不是什么大问题。

供您参考,我使用的是 C++11 编译器。先感谢您。

c++ binary performance bioinformatics char

0
推荐指数
1
解决办法
110
查看次数

如何在python中反转所有位?

我想按如下方式转换这些二进制表示。

"1111" -> "0000"
"1010" -> "0101"
Run Code Online (Sandbox Code Playgroud)

python math binary bit

0
推荐指数
1
解决办法
169
查看次数

将字符串中的零替换为一和将零替换为零的更有效方法(例如“100001”到“011110”)

目前我正在这样做,但问题是我正在遍历数千个这样的字符串(它们都比下面给出的示例字符串长得多)并且当前方法需要很长时间才能完成:

    example_string = '1001011101010010101010100100000001111011010101'
    reversed = ''
    for c in example_string:
        if c == '1':
            reversed += '0'
        elif c == '0':
            reversed += '1'
    print(reversed)

Run Code Online (Sandbox Code Playgroud)

python binary optimization

0
推荐指数
1
解决办法
360
查看次数

`0x15` 返回 00010101,而不是

嗨,我正在处理 c 编程中的按位表示

我打印出来0x15期待0000 1111但得到0001 0101. 这是0x21.

我用这个宏打印出二进制数字

#include <stdio.h>

#define BYTE_TO_BINARY_PATTERN_1BYTE "%c%c%c%c %c%c%c%c"
#define BYTE_TO_BINARY(byte)    \
    (byte & 0x80 ? '1' : '0'), \
    (byte & 0x40 ? '1' : '0'), \
    (byte & 0x20 ? '1' : '0'), \
    (byte & 0x10 ? '1' : '0'), \
    (byte & 0x08 ? '1' : '0'), \
    (byte & 0x04 ? '1' : '0'), \
    (byte & 0x02 ? '1' : '0'), …
Run Code Online (Sandbox Code Playgroud)

c binary literals

0
推荐指数
1
解决办法
75
查看次数

~0x00 如何返回-1?

据我所知,~0x00 等于:第一步,将 0 更改为 1,将 1 更改为 0,第二步,添加 1 步骤 1:11111111111111111111(计数 =32)

第二步:11111111111111111111111111111+1=0

我哪里做错了?

c binary bitmask bit

0
推荐指数
1
解决办法
75
查看次数

为什么这个二进制文件容易受到缓冲区溢出的影响?

这是缓冲区溢出的二进制文件的摘录。我用 Ghidra 反编译了它。

  char local_7 [32];
  long local_78;

  printf("Give it a try");
  gets(local_7);
      if (local_78 != 0x4141414141414141) {
        if (local_78 == 0x1122334455667788) {
          puts ("That's won")
        }
        puts("Let's continue");
      }
Run Code Online (Sandbox Code Playgroud)

我想了解为什么可能会发生缓冲区溢出。
我检查了“0x4141414141414141”十六进制值,发现它与“A”字符串有关。但是与“0x4141414141414141”和“0x1122334455667788”相关的条件究竟是做什么的?更准确地说,用户可以回答什么来获得消息(“那是赢了”)?
任何解释将不胜感激,谢谢!

___EDIT ___
我必须补充一点,我在使用“disas main”命令时看到了这两个十六进制值:

0x00000000000011a7 <+8>: movabs $0x4141414141414141,%rax  
0x00000000000011e6 <+71>: movabs $0x4141414141414141,%rax  
0x00000000000011f6 <+87>: movabs $0x1122334455667788,%rax
Run Code Online (Sandbox Code Playgroud)

我尝试使用python3 -c "print ('A' * 32 +'\x88\x77\x66\x55\x44\x33\x22\x11')" | ./ myBinary.
但我总是有"Let's continue"消息。我离解决方案不远了,但我想我错过了一件事..你能帮我什么吗?

___EDIT 2 ___ 在获取之前:

  char local_7 [40];
  long local_78;
  
  local_78 = 0x4141414141414141;
  printf("Give it a …
Run Code Online (Sandbox Code Playgroud)

c c++ binary buffer-overflow ghidra

0
推荐指数
1
解决办法
235
查看次数