简体   繁体   中英

How to make an external text file a part of the executable?

Basically I want to include a help routine in my program, one option I have is to use a lot of printf inside a help function. I was wondering if I could instead write my instructions in a text file such that it reads it and prints it out, but in that case I would have to pass the file around with the executable. Is there a way to make the file resource a part of the executable itself?

Compiler: MSVC

Sure, the compiler for C-like languages puts static strings in the .text section (it may be named differently depending on your target arch/the corresponding assembly specification). You just need to format it properly and assign it to a static string then it will be put into the executable by the compiler.

C++ example:

#include <iostream>

static std::string help_text = "Hi, I'm a help text\n"
                                "-a do this\n"
                                "-b do that\n"
                                "...\n"
                                "-a do this\n"
                                "-b do that\n";

int main(const int argc, const char *argv[]) {
    if (argc != 2) {
        std::cout << "Usage: " << help_text << std::endl;
        exit(0);
    }
}

Likewise, define the string in a header file and include that header file into the main to keep the main file clean.

In response to the comment a tiny nasm x86 SystemV example:

mov    rdi, vmsg  ; move whats to be printed to the destination index register 
mov    rsi, args_to_printf ; e.g. when using %d or sth. to the source index register
extern printf
call   printf

Effectively it makes no difference, it's just a way to move the text to an extra file but still including it into the static part of the executable.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM