Довольно хорошим хорошим индикатором для функции, по крайней мере для программ, написанных на языках высокого уровня, является код, который устанавливает фрейм стека.
Если вы знаете компилятор, который использовался для генерации кода, о котором идет речь, вы сможете найти, что искать.
Пример
$ cat main.c
int main(int argc, char **argv) {
return 1;
}
$ gcc -m32 -S main.c
$ cat main.s
.file "main.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
movl $1, %eax
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (Debian 4.3.3-4) 4.3.3"
.section .note.GNU-stack,"",@progbits
В моем примере инструкция movl% esp,% ebp является последней инструкцией этого кода установки.
Коммерческий дизассемблер IDA Pro, для которого доступна для скачивания бесплатная версия как пиво , выполняет довольно неплохую работу по автоматическому поиску функций.