- Oct 19, 2023
-
-
Leon Weiss authored
-
Leon Weiss authored
-
Leon Weiss authored
-
Leon Weiss authored
Document known issues
-
Leon Weiss authored
-
- Jun 08, 2023
-
-
Jason Hiser authored
-
- Apr 03, 2023
-
-
Jason Hiser authored
-
- Mar 27, 2023
-
-
Jason Hiser authored
-
- Feb 14, 2023
-
-
Jason Hiser authored
-
- Feb 09, 2023
-
-
Jason Hiser authored
-
- Feb 01, 2023
-
-
Jason Hiser authored
-
Jason Hiser authored
-
- Jan 06, 2023
-
-
Jason Hiser authored
-
- May 19, 2022
-
-
Jason Hiser authored
Address issue with one table being unpinned, and another table not being unpinned.
-
- May 04, 2022
-
-
Jason Hiser authored
Fixed calls break exception handling, and largely aren't needed anymore. We were still "fixing" calls when it had no fallthrough instruction, assuming the call is used for something else. Except that sometimes a "call _cxa_throw" ends a function/section and legitimately has no fallthrough. And this breaks the exception handling. Testing this fix against the Zipr test suite to verify that it is OK on a large suite of programs.
-
- Apr 27, 2022
-
-
Jason Hiser authored
-
- Apr 25, 2022
-
-
- Jan 10, 2022
-
-
Jason Hiser authored
-
- Jan 08, 2022
-
-
Jason Hiser authored
-
- Dec 31, 2021
-
-
Jason Hiser authored
-
- Dec 29, 2021
-
-
- Dec 09, 2021
-
-
Jason Hiser authored
Was previously asserting isRegister() or isMemory(), but could also be isConstant().
-
Jason Hiser authored
-
Jason Hiser authored
-
- Nov 28, 2021
-
-
Jason Hiser authored
* Update 68-sled code to be keystone friendly * Corrected spelling of getInstruction. removed extraneous assert. * Disable should-pin-immediately because it interfers with sleds. * Remove assert from fix-calls about odd prefixing, just dont fix the call. More of an issue with FII doing disassembly * Update switch->code discovery path to only happen if switch table is in text segment * fixed FII to do what the last commit said -- only disassembly when TABLE is in text. also patched zipr to handle xbegin gracefully. * Disable verbose setting * Create lots of dbs instead of just a few
-
- Nov 22, 2021
-
-
Jason Hiser authored
Update find-in-function method to be more vague about the leas it finds when precise-switch-statement finding is impossible
-
- Nov 21, 2021
-
-
Jason Hiser authored
-
- Nov 17, 2021
-
-
Jason Hiser authored
Issue was related to intermediate set of the compare register. Leveraged backup_until's stopif argument to stop backup until sooner. Note: as indicated in code comment, single register/register move is common and could be used to improve accuracy.
-
Jason Hiser authored
1) FII was finding the wrong cmp for switch tables. Removed the blind cmp and forced the cmp to use the proper register or not find a cmp. Also changed the limit for a table size when no cmp is found from 2^32 to 255. 2) Fixed an issue with zipr dollop layout where the size to layout 1 instruction + a trampoline was bigger than laying out two+ full dollops (because both dollops were short), but the dollops are disallowed from being coalesced. The worst-size detector needed to account for non-coalescable dollops.
-
- Nov 15, 2021
-
-
Jason Hiser authored
-
- Nov 11, 2021
-
-
Jason Hiser authored
-
- Sep 15, 2021
-
-
Jason Hiser authored
Debugging code allows for one to binary-search the unpins. But a .dynsym, .got, etc. entry can be duplicated in it's own section or other sections. Unpinning has to handle unpinning an instruction and deal with updating all tables properly. Bug was found in handling of the unpin for .dynsym in this regard. This patch fixes that bug.
-
- Aug 12, 2021
-
-
Jason Hiser authored
-
- Aug 11, 2021
-
-
Jason Hiser authored
In particulate, an alternate version of switch tables was being mis-detected by FII. In particular, switch tables were assumed to be size=4, but we found size!=4 in sqlite (in particular, size=8). And, I know windows binaries have size=1,2. Also fixed an issue where lea reg1, [reg2+reg3] assumed reg2/reg3 had values (i.e., reg2 is the base address of a switch table), when reg3 might have the value. Fixed the assumption by tracing both reg2+reg3. Some minor code cleanups.
-
- Aug 10, 2021
-
-
Jason Hiser authored
-
- Jul 27, 2021
-
-
Jason Hiser authored
The dynsym section is parsed by objdump/grep. It's terrible and needs to be implemented in C++ to reduce dependence on external tools knowing what they are doing. In this case, the terrible pattern matching with grep caused a symbol defined in the binary to be missed, because `grep -v UND` was used to determine whether a symbol "mattered". 1) symbol names might have UND and get eliminated accidentally, but 2) (what really happened) was that the symbol was defined in a section without a "link" field in the dynsym section, thus objdump displayed the section name as UND and thus the code skipped the symbol. Don't use objdump to parse ELF files!
-
- Jul 20, 2021
-
-
Jason Hiser authored
Rida: Parsing of .plt.sec section added for x86/64 ubuntu 20 needed to be updated to support x86/32 in ubuntu 20. Fix-calls: Thunk checks aged poorly. Revived/fixed some of them.
-
- Jun 12, 2021
-
-
Jason Hiser authored
Shared libs need a reloc for a code pointer to live in rodata. I found in ffmpeg that many spurious pins were occuring because constant (particularly with relatively small values) data looked like code poitners (because the code's load point is address 0 in a shared library). To avoid these spuriosu pins, I extended the code pin algorithm to check isDLL() (which includes shared objects) and for a reloc before attempting to pin in the rodata. A perf. optimization verifies that it _might_ result in a pin before checking for a reloc, as checking for a reloc can be slow, while checking for a possible pin location is fast.
-
- Apr 27, 2021
-
-
Jason Hiser authored
-
- Apr 26, 2021
-
-
Jason Hiser authored
Table size min was set to <=4 items, but readelf on ubuntu20 had a switch table with exactly 4 elements. This caused FII to miss the table size and subsequently include _many_ extra IBTs. Ultimately, Zipr failed by trying to 68-sled an entire function due to FII's failure.
-