From 914fdf9ba0e4b4b21eda5b0b191c2cad3aaf19e0 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Thu, 20 Dec 2007 12:24:17 -0800 Subject: [PATCH] ndisasm: handle instructions at offset zero Correctly handle instructions at offset zero --- ndisasm.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ndisasm.c b/ndisasm.c index 479bfe4d..a5ca292a 100644 --- a/ndisasm.c +++ b/ndisasm.c @@ -259,7 +259,8 @@ int main(int argc, char **argv) nextsync = next_sync(offset, &synclen); do { uint32_t to_read = buffer + sizeof(buffer) - p; - if (nextsync && to_read > nextsync - offset - (p - q)) + if ((nextsync || synclen) && + to_read > nextsync - offset - (p - q)) to_read = nextsync - offset - (p - q); if (to_read) { lenread = fread(p, 1, to_read, fp); @@ -268,7 +269,8 @@ int main(int argc, char **argv) } else lenread = 0; p += lenread; - if (nextsync && (uint32_t)offset == nextsync) { + if ((nextsync || synclen) && + (uint32_t)offset == nextsync) { if (synclen) { fprintf(stdout, "%08"PRIX32" skipping 0x%"PRIX32" bytes\n", offset, synclen); offset += synclen; @@ -282,7 +284,8 @@ int main(int argc, char **argv) disasm((uint8_t *) q, outbuf, sizeof(outbuf), bits, offset, autosync, prefer); if (!lendis || lendis > (p - q) - || (uint32_t)lendis > nextsync - offset) + || ((nextsync || synclen) && + (uint32_t)lendis > nextsync - offset)) lendis = eatbyte((uint8_t *) q, outbuf, sizeof(outbuf)); output_ins(offset, (uint8_t *) q, lendis, outbuf); q += lendis; -- 2.11.4.GIT