Я, глядя на разборке исполняемым я просто построил, и я в замешательстве относительно того, что эта линия может значить:Branch и нести добавил компилятором
00000000 <func_foo>:
0: e1a0100d mov r1, sp
4: e59fd090 ldr sp, [pc, #144]
8: e92d4002 push {r1, lr}
c: eafffffe b c <func_foo+0xc> ;;; <<----- HERE
Инструкция ветвь имеет кэрри бит (c) установлен, но он просто ветвится в себя. Он выглядит как бесконечный цикл, но я не вставлял этот код; он был полностью сгенерирован компилятором (GCC 4.6.3).
Может ли кто-нибудь пролить свет на это?
Carry бит комплект? Как вы это видите? Можете ли вы показать источник C для своей функции? Как вы полагаете, эта инструкция, по-видимому, представляет собой бесконечный цикл. –
Вы разбираете динамически связанный исполняемый файл и, таким образом, смотрите на заполнитель для вызова функции библиотеки, которая еще не была решена? – unixsmurf
@unixsmurf может быть на правильном пути, хотя он не требует динамической компоновки. Если у вас есть хвостовой вызов функции из другой единицы перевода в конце 'func_foo', возможно, что компилятор испустит то, что вы видите. Можете ли вы показать источник? –