2025-04-15 22:20:46 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# CALL instruction tests
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# Format: RawBytes;Instructions
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								RawBytes;Instructions
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# CALL rel32 (opcode E8)
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								E810000000;[{ "Type": "Call", "Operands": ["0x00000015"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								E8FEFFFFFF;[{ "Type": "Call", "Operands": ["0x00000003"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:32:37 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								E800000000;[{ "Type": "Call", "Operands": ["0x00000005"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								E8FFFFFFFF;[{ "Type": "Call", "Operands": ["0x00000004"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:20:46 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# CALL r/m32 (opcode FF /2) with register operands
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FFD0;[{ "Type": "Call", "Operands": ["eax"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FFD1;[{ "Type": "Call", "Operands": ["ecx"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FFD2;[{ "Type": "Call", "Operands": ["edx"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FFD3;[{ "Type": "Call", "Operands": ["ebx"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FFD4;[{ "Type": "Call", "Operands": ["esp"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FFD5;[{ "Type": "Call", "Operands": ["ebp"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FFD6;[{ "Type": "Call", "Operands": ["esi"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FFD7;[{ "Type": "Call", "Operands": ["edi"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# CALL m32 (opcode FF /2) with memory operands
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF10;[{ "Type": "Call", "Operands": ["dword ptr [eax]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF11;[{ "Type": "Call", "Operands": ["dword ptr [ecx]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF12;[{ "Type": "Call", "Operands": ["dword ptr [edx]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF13;[{ "Type": "Call", "Operands": ["dword ptr [ebx]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-16 19:58:34 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								# SPECIAL CASES in x86 encoding:
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# 1. When Mod=00 and R/M=100 (ESP), a SIB byte is required. The instruction FF14 is invalid because
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								#    it's missing the required SIB byte. The correct encoding would use a SIB byte (e.g., FF1424).
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# 2. When Mod=00 and R/M=101 (EBP), this doesn't actually refer to [EBP] but instead indicates
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								#    a 32-bit displacement-only addressing mode. The correct encoding for "Call [disp32]" would be
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								#    FF1578563412 which is "Call dword ptr [0x12345678]"
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 23:54:51 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								# FF14;[{ "Type": "Call", "Operands": ["dword ptr [esp]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# FF15;[{ "Type": "Call", "Operands": ["dword ptr [ebp]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:20:46 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF16;[{ "Type": "Call", "Operands": ["dword ptr [esi]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF17;[{ "Type": "Call", "Operands": ["dword ptr [edi]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# CALL m32 (opcode FF /2) with SIB addressing
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF1400;[{ "Type": "Call", "Operands": ["dword ptr [eax+eax*1]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF14C0;[{ "Type": "Call", "Operands": ["dword ptr [eax+eax*8]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF1444;[{ "Type": "Call", "Operands": ["dword ptr [esp+eax*2]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-16 19:58:34 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								# SPECIAL CASE: SIB byte with EBP as base register
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# When the SIB byte has Base=101 (EBP) and Mod=00, the base register is not used.
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# Instead, a 32-bit displacement follows the SIB byte (similar to the Mod=00, R/M=101 special case).
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# This instruction is commented out because it's not correctly recognized by many disassemblers.
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-16 19:07:32 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								# FF1485;[{ "Type": "Call", "Operands": ["dword ptr [ebp+eax*4]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:20:46 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF1498;[{ "Type": "Call", "Operands": ["dword ptr [eax+ebx*4]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF14D9;[{ "Type": "Call", "Operands": ["dword ptr [ecx+ebx*8]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-16 19:58:34 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								# SPECIAL CASE: Another SIB byte with EBP as base register
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# When the SIB byte has Base=101 (EBP) and Mod=00, the base register is not used.
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# Instead, a 32-bit displacement follows the SIB byte (similar to the Mod=00, R/M=101 special case).
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# This instruction is commented out because it's not correctly recognized by many disassemblers.
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-16 19:07:32 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								# FF149D;[{ "Type": "Call", "Operands": ["dword ptr [ebp+ebx*4]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:20:46 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# CALL m32 (opcode FF /2) with displacement
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-16 19:43:03 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								FF5000;[{ "Type": "Call", "Operands": ["dword ptr [eax+0x00]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:20:46 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF5010;[{ "Type": "Call", "Operands": ["dword ptr [eax+0x10]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF90FFFFFF7F;[{ "Type": "Call", "Operands": ["dword ptr [eax+0x7FFFFFFF]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF9000000080;[{ "Type": "Call", "Operands": ["dword ptr [eax+0x80000000]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# CALL m32 (opcode FF /2) with SIB and displacement
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-16 19:43:03 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								FF5400FF;[{ "Type": "Call", "Operands": ["dword ptr [eax+eax*1-0x01]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF54C0FF;[{ "Type": "Call", "Operands": ["dword ptr [eax+eax*8-0x01]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF5444FF;[{ "Type": "Call", "Operands": ["dword ptr [esp+eax*2-0x01]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF5485FF;[{ "Type": "Call", "Operands": ["dword ptr [ebp+eax*4-0x01]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF5498FF;[{ "Type": "Call", "Operands": ["dword ptr [eax+ebx*4-0x01]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF54D9FF;[{ "Type": "Call", "Operands": ["dword ptr [ecx+ebx*8-0x01]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF549DFF;[{ "Type": "Call", "Operands": ["dword ptr [ebp+ebx*4-0x01]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:20:46 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# CALL m16:32 (opcode FF /3) - Far call with memory operand
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF1C;[{ "Type": "Call", "Operands": ["fword ptr [esp]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-16 21:44:02 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								# SPECIAL CASE in x86 encoding:
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# When Mod=00 and R/M=101 (EBP), this doesn't actually refer to [EBP] but instead indicates
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# a 32-bit displacement-only addressing mode. The correct encoding for "Call fword ptr [ebp]"
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# would be FF5D00 which is "Call fword ptr [ebp+0x0]"
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# FF1D;[{ "Type": "Call", "Operands": ["fword ptr [ebp]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# Correct encoding for "Call fword ptr [ebp]" with displacement 0
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF5D00;[{ "Type": "Call", "Operands": ["fword ptr [ebp+0x0]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:20:46 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF1E;[{ "Type": "Call", "Operands": ["fword ptr [esi]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF1F;[{ "Type": "Call", "Operands": ["fword ptr [edi]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:32:37 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								FF18;[{ "Type": "Call", "Operands": ["fword ptr [eax]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF19;[{ "Type": "Call", "Operands": ["fword ptr [ecx]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF1A;[{ "Type": "Call", "Operands": ["fword ptr [edx]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF1B;[{ "Type": "Call", "Operands": ["fword ptr [ebx]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:20:46 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# CALL m32 (opcode FF /2) with direct memory operand
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								FF1578563412;[{ "Type": "Call", "Operands": ["dword ptr [0x12345678]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:32:37 +03:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								FF1534127856;[{ "Type": "Call", "Operands": ["dword ptr [0x56781234]"] }]
							 | 
						
					
						
							
								
									
										
										
										
											2025-04-15 22:20:46 +03:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								# CALL m32 (opcode FF /2) with segment override prefixes
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								26FF5510;[{ "Type": "Call", "Operands": ["dword ptr es:[ebp+0x10]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								2EFF5510;[{ "Type": "Call", "Operands": ["dword ptr cs:[ebp+0x10]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								36FF5510;[{ "Type": "Call", "Operands": ["dword ptr ss:[ebp+0x10]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								3EFF5510;[{ "Type": "Call", "Operands": ["dword ptr ds:[ebp+0x10]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								64FF5510;[{ "Type": "Call", "Operands": ["dword ptr fs:[ebp+0x10]"] }]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								65FF5510;[{ "Type": "Call", "Operands": ["dword ptr gs:[ebp+0x10]"] }]
							 |