Skip to content

Crashes with EXC_BAD_ACCESS on Apple Silicon mac when compiled as arm64e #89

@briankendall

Description

@briankendall

Compiling an arm64e macOS app on an M1 Mac Mini in macOS 11.6. When a hooked function gets called, the app crashes with EXC_BAD_ACCESS. The following code when compiled as arm64e will crash on the second (hooked) call to malloc:

#include <stdio.h>
#include <stdlib.h>
#include "fishhook.h"

void * (*originalMalloc)(size_t);

static void * overrideMalloc(size_t size) {
    void * result = originalMalloc(size);
    printf("calling overrideMalloc!\n");
    return result;
}

int main(int argc, const char * argv[]) {
    void *data;
    
    printf("Calling malloc before\n");
    data = malloc(10);
    free(data);
    
    int result = rebind_symbols((struct rebinding[2]){{"malloc", overrideMalloc, (void *)&originalMalloc}}, 1);
    
    if (result != 0) {
        printf("rebind_symbols failed with result: %d ... cannot proceed", result);
        return 0;
    }
    
    printf("Calling malloc after\n");
    data = malloc(10);
    free(data);
    
    return 0;
}

Note that in order to run arm64e code on macOS, you must disable system integrity protection and set the following boot parameter:
sudo nvram boot-args=-arm64e_preview_abi

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions