Извиняюсь, что это не совсем ответ, но это слишком долго, чтобы соответствовать как комментарий ...
Я собираюсь предположить, что намерение файла для чтения с сырым двоичном в буфер получить код байт в ОЗУ, и вы хотите выполнить эти байты. Предположим, что у вас установлен I/O файл, поэтому теперь у вас есть буфер с байтами кода. Есть несколько причин, почему вы все еще можете столкнуться.
Во-первых, выполняет ли ваша O/S виртуальная память с атрибутами страницы, такими как чтение, запись и выполнение? Большинство современных O/S не позволят вам выполнять код на странице, которая не помечена как код. (Маркировка страниц таким образом важна, чтобы знать, что можно поменять местами, а также предотвратить вредоносное кодирование.)
Во-вторых, является ли загруженный вами двоичный код полностью переносимым? Другими словами, если в коде есть какие-либо JUMP-файлы, они все относительны? Если в них есть какие-либо абсолютные операторы JUMP, вам необходимо запустить их, чтобы выстроить их в очередь, где находится ваш буфер.
В-третьих, является ли двоичный код 100% автономным? Если он обращается к любым внешним функциям, вам также нужно исправлять их.
Наконец, нужен ли двоичный код для доступа к данным? Если это так, все данные также содержатся в двоичном, а также относительном адресе против абсолютного.
Вы избавляетесь от кого? –
Segfaults ... :) –
Почему вы 'malloc()' 'l + 1'? –