DynamoRIO / DynamoRIO/dynamorio

<APP CRASH> - Notepad++ Crashes with droption_t

Open
#5,181 5 comments 0 reactions 0 assignees View on GitHub
Status-NeedInfo
Dominant language
C
Stars
3.2k
Forks
629
Avg merge
2d 15h
Merged PRs (30d)
31

Description

**Describe the bug**
I want to parse arguments send to client dll by a front-end (similar to `drrun.exe`) via `dr_register_client` .
To do this I'm using `droption_parser_t` on client side to parse arguments, it works on simple hello worlds apps but have issues with real works apps, for example, `notepad++` (64bit) crashes instantly, even if there is no other code than `droption_parser_t::parse_argv`.

**To Reproduce**
Steps to reproduce the behavior:
1. compile a client dll with following code:
```
DR_EXPORT void
dr_client_main(client_id_t id, int argc, const char *argv[])
{
droption_t first_arg(DROPTION_SCOPE_CLIENT, "aaa", "", "aaaaaa",
"aaaaaaaaaaaaaa");
droption_t second_arg(DROPTION_SCOPE_CLIENT, "bbb", 0, "bbbbbb",
"bbbbbbbbbbbbbbb");
std::string parse_err;
int last_index;
if (!droption_parser_t::parse_argv(DROPTION_SCOPE_CLIENT, argc, argv, &parse_err, &last_index))
{
dr_fprintf(STDERR, "Usage error: %s", parse_err.c_str());
dr_messagebox("argument parsing error");
dr_abort();
}
}
```

My custom front-end have following code to provide arguments to the client:
```
client_id_t client_id = 0;
const auto client_options = "--aaa " + first_string.string() + " " +
"--bbb " + std::to_string(second_arg.get_value());
if (dr_register_client(process_name, pid, false /*local*/, DR_PLATFORM_DEFAULT, client_id, 0,
client_path.string().c_str(), client_options.c_str()) != DR_SUCCESS)
{
logger.logger->critical("dr_register_client function call failed");
exit(1);
}
```
If I run my client dll without `droption_t` and just hardcode the two values it works as excepted, no crashes.
My guess is that there is an issue how args are provided or how they are parsed

2. `{..}/my_front.exe -c ./yourclient.dll -- 'C:\Program Files\Notepad++\notepad++.exe'`
3. The notepad++ will not even open

Please also answer these questions:
- What happens when you run without any client?
- `{..}/drrun.exe -- 'C:\Program Files\Notepad++\notepad++.exe'` - Notepad++ runs as expected.
- What happens when you run with debug build ("-debug" flag to drrun/drconfig/drinject)?
- Getting messagebox with text: "argument parsing error", since we parsing arguments and `drrun` doesn't provide any.

**Expected behavior**
Open Notepad++

**Versions**
- What version of DynamoRIO are you using?
- DynamoRIO-Windows-8.0.18921
- Does the latest build from https://github.com/DynamoRIO/dynamorio/releases solve the problem?
- No
- What operating system version are you running on? ("Windows 10" is *not* sufficient: give the release number.)
- Windows 10, Version 20H2 - Build 19042.1288
- Is your application 32-bit or 64-bit?
- 64

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.