Челлендж для энтузиастов
2023-11-01 22:46![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Хотите хитрую задачку для любителей чего-нибудь просимулировать? В качестве домашнего хобби. Предлагается запустить на Линуксе бинарник от мака. Будет время - я сам эту задачку осилю, а пока предложу уважаемой публике.
Текст программы классический:
Подсказка: про устройство маковских бинарников и динамических библиотек можно подсмотреть в исходниках проекта Darling.
Текст программы классический:
Если у вас линукс:#include <stdio.h>
int main()
{
printf("Hello, World!\n");
}
- на интеловском процессоре - вот вам маковский бинарник Hello-World для архитектуры x86_64: hello-x86_64
- на процессоре ARM (скажем, Raspberry Pi) - вот бинарник для архитектуры arm64: hello-arm64
Подсказка: про устройство маковских бинарников и динамических библиотек можно подсмотреть в исходниках проекта Darling.
no subject
Date: 2023-11-02 16:18 (UTC)no subject
Date: 2023-11-02 18:25 (UTC)Из википедии:
no subject
Date: 2023-11-02 19:00 (UTC)no subject
Date: 2023-11-02 19:31 (UTC)no subject
Date: 2023-11-04 12:51 (UTC)no subject
Date: 2023-11-02 17:03 (UTC)no subject
Date: 2023-11-02 18:21 (UTC)Там есть утилитка mldr, из её текстов можно разобраться, как грузить маковский бинарник в память.
no subject
Date: 2023-11-02 18:07 (UTC)В такой формулировке достаточно имитировать printf().
Но чтобы эмулятор оказался хоть сколько-то универсальным, надо имитировать системные вызовы изнутри libSystem.
no subject
Date: 2023-11-02 18:17 (UTC)no subject
Date: 2023-11-02 22:54 (UTC)Короче я сделал не универсально, зато быстро - сишка линкуется с объектником, который `binary: .incbin hello-arm64`. Патчит адреса и запускает через pthread_attr_setstack и pthread_create.
Но конечно это неуниверсальное фуфло.
no subject
Date: 2023-11-03 06:33 (UTC)