diff --git a/irdb-libs/ir_builders/fix_calls.cpp b/irdb-libs/ir_builders/fix_calls.cpp
index 519810db62da1a44544976240ef4fd7e622bbf37..ff650611c93dcec4287bf2c3b02ae671f3261f6c 100644
--- a/irdb-libs/ir_builders/fix_calls.cpp
+++ b/irdb-libs/ir_builders/fix_calls.cpp
@@ -844,7 +844,9 @@ class FixCalls_t : public TransformStep_t
 						switch(size)
 						{
 							case 4:
-								assert( (uintptr_t)(int)newdisp == (uintptr_t)newdisp);
+								// if newdisp is negative (or bigger than 32-bit), then the instruction is accessing invalid memory.
+								// and is likely bogus.  we just skip doing any pc-rel for it.
+								if( (uintptr_t)(int32_t)newdisp != (uintptr_t)newdisp) continue;
 								*(int*)offsetptr=newdisp;
 								break;
 							case 1:
diff --git a/irdb-libs/libIRDB-util/src/params.cpp b/irdb-libs/libIRDB-util/src/params.cpp
index 68bab5b3aa27ff385ba45e3b893c8eac37eaa7cc..a716a283e64e32cbe7632d2b6902c35fd29a467a 100644
--- a/irdb-libs/libIRDB-util/src/params.cpp
+++ b/irdb-libs/libIRDB-util/src/params.cpp
@@ -70,9 +70,14 @@ bool IRDB_SDK::isParameterWrite(const IRDB_SDK::FileIR_t *firp, IRDB_SDK::Instru
 	if(!d.getOperand(0)->isMemory())
 		return false;
 
+	// pcrel instructions aren't to the stack.
+	if(d.getOperand(0)->isPcrel())
+		return false;
+
 	// check that base reg is esp.
 	if(!d.getOperand(0)->hasBaseRegister())
 		return false;
+
 	if(d.getOperand(0)->getBaseRegister() != 4)
 		return false;