common: Skip get_immediate_operand without any imm
authorJosh Stone <jistone@redhat.com>
Tue, 28 Jan 2014 01:45:32 +0000 (17:45 -0800)
committerJosh Stone <jistone@redhat.com>
Wed, 12 Feb 2014 22:17:47 +0000 (14:17 -0800)
commit18871aeb37e726228425e8ff4e90cf2c849b7ae1
treea7ca8a04b644879373a8a4f5934067360d82bfb9
parentf3cb212422acfe4a55d31c3ebd3bb18b934ec5eb
common: Skip get_immediate_operand without any imm

For x86 image::findMain, we blindly look for the first call from the
entry address, then grab the immediate operand from the preceding
instruction.  Sometimes that instruction may not even have any immediate
operands, and the heuristic fails with a message on stderr like:

  arch-x86.C[5602]:  invalid immediate size 0 in insn

This now occurs with some ET_DYN binaries that are allowed by commit
44205dbd2d90, when those are really DSOs and not PIE.  However, this
could conceivably also happen for any executable that doesn't fit the
heuristic pattern.

This patch quietly returns 0 from get_immediate_operand when there are
no operands, and image::findMain will treat this as an invalid address.
common/src/arch-x86.C