mirror of
				https://github.com/sampletext32/ParkanPlayground.git
				synced 2025-11-03 23:09:44 +03:00 
			
		
		
		
	Added test for INT3 instruction handler
This commit is contained in:
		@@ -45,6 +45,8 @@ public class InstructionHandlerFactory
 | 
				
			|||||||
        RegisterGroup1Handlers();
 | 
					        RegisterGroup1Handlers();
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        // Register specific instruction handlers
 | 
					        // Register specific instruction handlers
 | 
				
			||||||
 | 
					        _handlers.Add(new Int3Handler(_codeBuffer, _decoder, _length));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _handlers.Add(new RetHandler(_codeBuffer, _decoder, _length));
 | 
					        _handlers.Add(new RetHandler(_codeBuffer, _decoder, _length));
 | 
				
			||||||
        _handlers.Add(new RetImmHandler(_codeBuffer, _decoder, _length));
 | 
					        _handlers.Add(new RetImmHandler(_codeBuffer, _decoder, _length));
 | 
				
			||||||
        _handlers.Add(new CallRel32Handler(_codeBuffer, _decoder, _length));
 | 
					        _handlers.Add(new CallRel32Handler(_codeBuffer, _decoder, _length));
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								X86Disassembler/X86/Handlers/Int3Handler.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								X86Disassembler/X86/Handlers/Int3Handler.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					namespace X86Disassembler.X86.Handlers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// Handler for CALL rel32 instruction (0xE8)
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					public class Int3Handler : InstructionHandler
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Initializes a new instance of the CallRel32Handler class
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    /// <param name="codeBuffer">The buffer containing the code to decode</param>
 | 
				
			||||||
 | 
					    /// <param name="decoder">The instruction decoder that owns this handler</param>
 | 
				
			||||||
 | 
					    /// <param name="length">The length of the buffer</param>
 | 
				
			||||||
 | 
					    public Int3Handler(byte[] codeBuffer, InstructionDecoder decoder, int length) 
 | 
				
			||||||
 | 
					        : base(codeBuffer, decoder, length)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Checks if this handler can decode the given opcode
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    /// <param name="opcode">The opcode to check</param>
 | 
				
			||||||
 | 
					    /// <returns>True if this handler can decode the opcode</returns>
 | 
				
			||||||
 | 
					    public override bool CanHandle(byte opcode)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return opcode == 0xCC;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Decodes a CALL rel32 instruction
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    /// <param name="opcode">The opcode of the instruction</param>
 | 
				
			||||||
 | 
					    /// <param name="instruction">The instruction object to populate</param>
 | 
				
			||||||
 | 
					    /// <returns>True if the instruction was successfully decoded</returns>
 | 
				
			||||||
 | 
					    public override bool Decode(byte opcode, Instruction instruction)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Set the mnemonic
 | 
				
			||||||
 | 
					        instruction.Mnemonic = "int3";
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        // Set the operands
 | 
				
			||||||
 | 
					        instruction.Operands = "";
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										30
									
								
								X86DisassemblerTests/Int3InstructionTests.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								X86DisassemblerTests/Int3InstructionTests.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					namespace X86DisassemblerTests;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using Xunit;
 | 
				
			||||||
 | 
					using X86Disassembler.X86;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// Tests for INT3 instruction handler
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					public class Int3InstructionTests
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Tests the Int3Handler for decoding INT3 instruction
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    [Fact]
 | 
				
			||||||
 | 
					    public void Int3Handler_DecodesInt3_Correctly()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Arrange
 | 
				
			||||||
 | 
					        // INT3 (CC)
 | 
				
			||||||
 | 
					        byte[] codeBuffer = new byte[] { 0xCC };
 | 
				
			||||||
 | 
					        var decoder = new InstructionDecoder(codeBuffer, codeBuffer.Length);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        // Act
 | 
				
			||||||
 | 
					        var instruction = decoder.DecodeInstruction();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        // Assert
 | 
				
			||||||
 | 
					        Assert.NotNull(instruction);
 | 
				
			||||||
 | 
					        Assert.Equal("int3", instruction.Mnemonic);
 | 
				
			||||||
 | 
					        Assert.Equal("", instruction.Operands);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user