替换二进制文件中的字符串

渴望

我正在尝试编写一个* nix程序,该程序将自身复制并替换二进制文件中的字符串。复制过程似乎不起作用。

这是代码:

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
#include <fcntl.h>

#define BUFSIZE 10
#define FILENAME "token"

void findstring(const char *exe, const char* str)
{
    char buf[BUFSIZE];
    int line_num = 1;
    int i = 0, find_result = 0;
    FILE *fp = fopen(exe, "rb");
    if(fp == NULL)
        exit(-1);

    FILE *out = fopen("out", "wb");
    if(out == NULL)
        exit(-1);

    while(fgets(buf, BUFSIZE, fp) != NULL) {
        if((strstr(buf, str)))
        {
            printf("A match found on line: %d\n", line_num);
            printf("\n%s\n", buf);
            find_result++;

            // reverse "token" string in the output
            for(i = 0; i< BUFSIZE; i++)
            {
                if(strstr(&buf[i], "t") != NULL)
                    buf[i] = 'n';
                else if(strstr(&buf[i], "o") != NULL)
                    buf[i] = 'e';
                else if(strstr(&buf[i], "k") != NULL)
                    buf[i] = 'k';
                else if(strstr(&buf[i], "e") != NULL)
                    buf[i] = 'o';
                else if(strstr(&buf[i], "n") != NULL)
                    buf[i] = 't';
            }
        }
        line_num++;

        fputs(buf, out);
    }

    if(find_result == 0) {
        printf("\nSorry, couldn't find a match.\n");
    }

    fclose(fp);
    fclose(out);
}

int main(int argc, char **argv, char **envp)
{
//    argv[1] = FILENAME;

    char buf[1024];
    int fd, rc;

    findstring(argv[0], "token");

    if(argc == 1) {
        printf("\n\n%s [file to read]\n\n", argv[0]);
        exit(1);
    }

    printf("FILENAME macro = %s", FILENAME);

    if(strstr(argv[1], "token") != NULL) {
        printf("\n\nYou may not access '%s'\n\n", argv[1]);
        exit(2);
    }

    fd = open(argv[1], O_RDONLY);
    if(fd == -1) {
        printf("\n\nUnable to open %s\n\n", argv[1]);
        exit(3);
    }

    rc = read(fd, buf, sizeof(buf));

    if(rc == -1) {
        printf("\n\nUnable to read fd %d\n\n", fd);
        exit(4);
    }

    write(1, buf, rc);

    return 0;
}

应该在输出二进制文件(“ nekot”)中反转“令牌”字符串,并使用findstring函数负责执行此任务。还值得注意的是,找到的匹配项数量严格取决于BUFSIZE常数。

这段代码缺少什么?谢谢

克里斯·多德(Chris Dodd)

考虑一下它的作用:

  if(strstr(&buf[i], "t") != NULL)
      buf[i] = 'n';

这将从索引开始搜索缓冲区i,并且如果字符串"t"出现在缓冲区中的任何位置,它将用替换第一个字符n所以如果你的缓冲区有

a string with token inside.

for循环的第一次迭代会将其更改为

n string with token inside.

随着循环的进行,您将得到

nnnnnnnnnnith token inside.

经过10次迭代,最终

nnnnnnnnnnnnnnnekooooooooo.

其他事宜:

  • fgets读取字符串,直到换行符或BUFSIZE-1字符为止可能存在与换行符等效的字节。
  • BUFSIZE无论您读取多少字节,都在扫描字节。
  • fputs将写入第一个NUL字节。如果输入二进制文件中的任何地方都有NUL字节,则缓冲区中NUL之后的内容将丢失。

上面的意思是您可能要使用fread/fwrite而不是fgets/ fputs,并且要仔细检查快照读取或写入的返回值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何替换二进制文件中的unicode字符串?

来自分类Dev

在C ++中将二进制字符串输出到二进制文件

来自分类Dev

将二进制字符串(ASCII)转换为二进制文件

来自分类Dev

将大二进制字符串写入二进制文件

来自分类Dev

Python中带字符串的二进制

来自分类Dev

在字符串中翻转二进制

来自分类Dev

从字符串中写入二进制数据

来自分类Dev

从字符串中获取二进制数据

来自分类Dev

从二进制文件列表中打印包含特定 ascii 字符串的文件

来自分类Dev

使用外部文件中的二进制数据(utf-8中的字符串)

来自分类Dev

如何将二进制文件的内容放在c中的字符串中?

来自分类Dev

显示已编译二进制文件中的字符串

来自分类Dev

读取二进制文件中的字符串C ++

来自分类Dev

Python:在二进制文件(.PLM)中搜索unicode字符串

来自分类Dev

如何检查二进制文件中是否存在字符串?

来自分类Dev

从C中的二进制文件读取字符串时发生访问冲突

来自分类Dev

使用C ++在二进制文件中搜索字符串

来自分类Dev

什么时候可以在可执行二进制文件中编辑字符串?

来自分类Dev

如何从二进制文件中读取以nul结尾的字符串

来自分类Dev

关闭程序后如何从二进制文件中读取字符串

来自分类Dev

使用 C# 在文件中存储字符串索引的二进制数据

来自分类Dev

二进制到字符串/字符串到二进制

来自分类Dev

将任何文件转换为二进制字符串并从二进制转换为文件

来自分类Dev

JAVA从字符串转换为二进制然后在文件中返回字符串

来自分类Dev

将二进制字符串转换为布尔数组并输出二进制文件

来自分类Dev

从文件转换十六进制ASCII字符串并创建二进制文件

来自分类Dev

将二进制字符串转换为JavaScript中的字符串

来自分类Dev

将二进制字符串转换为JavaScript中的字符串

来自分类Dev

将二进制字符串转换为JavaScript中的字符串

Related 相关文章

  1. 1

    如何替换二进制文件中的unicode字符串?

  2. 2

    在C ++中将二进制字符串输出到二进制文件

  3. 3

    将二进制字符串(ASCII)转换为二进制文件

  4. 4

    将大二进制字符串写入二进制文件

  5. 5

    Python中带字符串的二进制

  6. 6

    在字符串中翻转二进制

  7. 7

    从字符串中写入二进制数据

  8. 8

    从字符串中获取二进制数据

  9. 9

    从二进制文件列表中打印包含特定 ascii 字符串的文件

  10. 10

    使用外部文件中的二进制数据(utf-8中的字符串)

  11. 11

    如何将二进制文件的内容放在c中的字符串中?

  12. 12

    显示已编译二进制文件中的字符串

  13. 13

    读取二进制文件中的字符串C ++

  14. 14

    Python:在二进制文件(.PLM)中搜索unicode字符串

  15. 15

    如何检查二进制文件中是否存在字符串?

  16. 16

    从C中的二进制文件读取字符串时发生访问冲突

  17. 17

    使用C ++在二进制文件中搜索字符串

  18. 18

    什么时候可以在可执行二进制文件中编辑字符串?

  19. 19

    如何从二进制文件中读取以nul结尾的字符串

  20. 20

    关闭程序后如何从二进制文件中读取字符串

  21. 21

    使用 C# 在文件中存储字符串索引的二进制数据

  22. 22

    二进制到字符串/字符串到二进制

  23. 23

    将任何文件转换为二进制字符串并从二进制转换为文件

  24. 24

    JAVA从字符串转换为二进制然后在文件中返回字符串

  25. 25

    将二进制字符串转换为布尔数组并输出二进制文件

  26. 26

    从文件转换十六进制ASCII字符串并创建二进制文件

  27. 27

    将二进制字符串转换为JavaScript中的字符串

  28. 28

    将二进制字符串转换为JavaScript中的字符串

  29. 29

    将二进制字符串转换为JavaScript中的字符串

热门标签

归档