function y = is_executable_binary(filename)
arguments
filename {mustBeTextScalar}
end
y = false;
fid = fopen(filename, 'rb');
if fid < 0
return
end
N = 4;
if ispc()
N = 2;
end
magic = fread(fid, N, 'uint8').';
fclose(fid);
if numel(magic) == N
y = check_magic(magic);
end
end
function y = check_magic(magic)
if ispc()
y = isequal(magic(1:2), [0x4d, 0x5a]);
elseif ismac()
feedface = [0xFE, 0xED, 0xFA, 0xCE];
feedfacf = [0xFE, 0xED, 0xFA, 0xCF];
cafebabe = [0xCA, 0xFE, 0xBA, 0xBE];
cafebabf = [0xCA, 0xFE, 0xBA, 0xBF];
for a = {feedface, fliplr(feedface), ...
feedfacf, fliplr(feedfacf), ...
cafebabe, fliplr(cafebabe), ...
cafebabf, fliplr(cafebabf)}
y = isequal(magic, a{1});
if y
return
end
end
else
y = isequal(magic, [0x7f, 0x45, 0x4c, 0x46]);
end
end