8000 [Array Access Detection] Array access not detected properly · Issue #399 · fkie-cad/dewolf · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
[Array Access Detection] Array access not detected properly #399
Open
@fnhartmann

Description

@fnhartmann

Proposal

See the following example: example.zip

Dewolf is currently creating the following code:

int main(int argc, char ** argv, char ** envp) {
    unsigned long var_1;
    long i;
    long var_0;
    __builtin_strcpy(/* dest */ &var_0, /* src */ "This is an example.");
    var_1 = strlen(&var_0);
    for (i = 0L; i < var_1; i++) {
        if ((int)*(&var_0 + i) != 32) {
            *(&var_0 + i) = *(&var_0 + i) ^ ' ';
        }
        printf(/* format */ "%c", (unsigned int)(int)*(&var_0 + i));
    }
    return 0;
}

(The ouput is generated with deactivated CSE. See #398 for more information.)

It seems like the Array Access Detection is not detecting the array here. Dewolf should recognize this and provide code that looks more like the source code in terms of array access, like the following:

        for (size_t i = 0; i < length; i++) {
                if (str[i] != 0x20)
                        str[i] = str[i] ^ 0x20;
                printf("%c", str[i]);
        }

Used Binary Ninja version: 3.5.4526

Approach

Analyze and debug why Array Access Detection is not working properly here. Adjust the stage depending on the result.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0