不奇怪呀!
因为你看到的 call 指令附近 被花 了,实际不是 call 指令
所以你 断下后堆栈无返回地址
附上我N久以前随机生成器生成的花指令系列之一(这只是冰山一角!),有兴趣的可以研究研究,反正我已经不想搞这些了:
//MyCRandJmpCodeHFile1.h
#pragma once
#define JMP_CODE_TAB1_000000(EdiCode) \
__asm push ecx \
__asm push dword ptr 0xbcdf6a99 \
__asm push dword ptr [esp + 0x2c] \
__asm push dword ptr 0x9d6ad411 \
__asm push dword ptr 0xcf24f46e \
__asm push dword ptr 0xd6ca35f7 \
__asm push dword ptr [esp + 0x20] \
__asm push edx \
__asm push dword ptr [esp + 0xc] \
__asm push ebp \
__asm push dword ptr [esp + 0x10] \
__asm call JMP_CODE_TAB1_000000_000 \
__asm _emit 0x81 \
__asm _emit 0xb5 \
__asm JMP_CODE_TAB1_000000_000: \
__asm push offset EdiCode + -1439573014 \
__asm sub dword ptr[esp],-1439573014 \
__asm jnz JMP_CODE_TAB1_000000_001 \
__asm _emit 0x81 \
__asm _emit 0x81 \
__asm JMP_CODE_TAB1_000000_001: \
__asm ret 44 \
__asm _emit 0x81 \
__asm _emit 0xc9
#define JMP_CODE_TAB1_000001(EdiCode) \
__asm push dword ptr 0xb09ea333 \
__asm sub esp,52 \
__asm call JMP_CODE_TAB1_000001_000 \
__asm _emit 0x81 \
__asm _emit 0xf7 \
__asm JMP_CODE_TAB1_000001_000: \
__asm push offset EdiCode + -1420218492 \
__asm sub dword ptr[esp],-1420218492 \
__asm jnz JMP_CODE_TAB1_000001_001 \
__asm _emit 0x0f \
__asm _emit 0x82 \
__asm JMP_CODE_TAB1_000001_001: \
__asm ret 56 \
__asm _emit 0x81 \
__asm _emit 0xf2
#define JMP_CODE_TAB1_000002(EdiCode) \
__asm push dword ptr [esp + 0x24] \
__asm push dword ptr [esp + 0x18] \
__asm push dword ptr 0xafdb4e66 \
__asm push dword ptr [esp + 0x34] \
__asm push dword ptr 0xc9634c66 \
__asm push dword ptr 0xabfb572c \
__asm push dword ptr [esp + 0x14] \
__asm push dword ptr [esp + 0x20] \
__asm push dword ptr [esp + 0x18] \
__asm call JMP_CODE_TAB1_000002_000 \
__asm _emit 0xb8 \
__asm JMP_CODE_TAB1_000002_000: \
__asm push offset EdiCode - -1066354610 \
__asm add dword ptr[esp],-1066354610 \
__asm jnz JMP_CODE_TAB1_000002_001 \
__asm _emit 0xa9 \
__asm _emit 0x78 \
__asm JMP_CODE_TAB1_000002_001: \
__asm ret 36 \
__asm _emit 0x25
#define JMP_CODE_TAB1_000003(EdiCode) \
__asm push dword ptr [esp + 0x4] \
__asm push ebx \
__asm push ebp \
__asm push dword ptr 0xb4a09355 \
__asm push dword ptr [esp + 0x14] \
__asm call JMP_CODE_TAB1_000003_000 \
__asm _emit 0xb8 \
__asm JMP_CODE_TAB1_000003_000: \
__asm push offset EdiCode + -1061102592 \
__asm sub dword ptr[esp],-1061102592 \
__asm jz JMP_CODE_TAB1_000003_E000 \
__asm ret 20 \
__asm _emit 0x81 \
__asm _emit 0x8c \
__asm JMP_CODE_TAB1_000003_E000: \
__asm _emit 0x81 \
__asm _emit 0xaf
//MyCRandJmpCodeHFile0.h
#pragma once
#define JMP_CODE_TAB_000(EdiCode) \
__asm push dword ptr [esp + 0x28] \
__asm push dword ptr 0xd2212ca1 \
__asm push edi \
__asm push dword ptr [esp + 0x24] \
__asm sub esp,68 \
__asm call JMP_CODE_TAB_000_000 \
__asm _emit 0xb8 \
__asm JMP_CODE_TAB_000_000: \
__asm xchg edi,[esp] \
__asm sub edi,offset JMP_CODE_TAB_000_000 - 1 - -1045432137 \
__asm add edi,offset EdiCode - -1045432137 \
__asm jz JMP_CODE_TAB_000_E000 \
__asm xchg edi,[esp] \
__asm ret 84 \
__asm _emit 0x81 \
__asm _emit 0xb3 \
__asm JMP_CODE_TAB_000_E000: \
__asm _emit 0x81 \
__asm _emit 0xa7
#define JMP_CODE_TAB_001(EdiCode) \
__asm push edi \
__asm push dword ptr [esp + 0x20] \
__asm push dword ptr [esp + 0x18] \
__asm push dword ptr [esp + 0x20] \
__asm push dword ptr [esp + 0x24] \
__asm sub esp,104 \
__asm call JMP_CODE_TAB_001_000 \
__asm _emit 0x25 \
__asm JMP_CODE_TAB_001_000: \
__asm xchg ebp,[esp] \
__asm sub ebp,offset JMP_CODE_TAB_001_000 - 1 + -1308997686 \
__asm add ebp,offset EdiCode + -1308997686 \
__asm jnz JMP_CODE_TAB_001_001 \
__asm _emit 0x0f \
__asm _emit 0x89 \
__asm JMP_CODE_TAB_001_001: \
__asm xchg ebp,[esp] \
__asm ret 124 \
__asm _emit 0x81 \
__asm _emit 0xfe
#define JMP_CODE_TAB_002(EdiCode) \
__asm push dword ptr 0xb4a09355 \
__asm push dword ptr [esp + 0x14] \
__asm push dword ptr [esp + 0x8] \
__asm push dword ptr [esp + 0x34] \
__asm push dword ptr 0xcba07e96 \
__asm sub esp,72 \
__asm call JMP_CODE_TAB_002_000 \
__asm _emit 0x81 \
__asm _emit 0xaf \
__asm JMP_CODE_TAB_002_000: \
__asm xchg edx,[esp] \
__asm sub edx,offset JMP_CODE_TAB_002_000 - 2 - -1645082403 \
__asm add edx,offset EdiCode - -1645082403 \
__asm jz JMP_CODE_TAB_002_E000 \
__asm xchg edx,[esp] \
__asm ret 92 \
__asm _emit 0x81 \
__asm _emit 0xf4 \
__asm JMP_CODE_TAB_002_E000: \
__asm _emit 0x81 \
__asm _emit 0x80
//MyCRandJmpCodeHFile2.h
#pragma once
#define JMP_CODE_TAB2_000000(EdiCode,EsiData) \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_001 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_000: \
__asm _emit 0x81 \
__asm _emit 0xce \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_001: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_000 - 3100 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_001 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_002 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_001: \
__asm _emit 0x81 \
__asm _emit 0xb5 \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_004: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_003 + 725 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_004 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_005 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_004: \
__asm _emit 0x81 \
__asm _emit 0xc5 \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_013: \
__asm add esp,52 \
__asm add dword ptr[esp + -12],offset EdiCode - 3561 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_013 \
__asm jmp [esp + -12] \
__asm JMP_CODE_TAB2_F_0000_RETCODE_013: \
__asm _emit 0x81 \
__asm _emit 0xae \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_010: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_009 + 3343 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_010 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_011 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_010: \
__asm _emit 0xf7 \
__asm _emit 0xfa \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_009: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_008 + 313 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_009 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_010 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_009: \
__asm _emit 0x81 \
__asm _emit 0x80 \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_012: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_011 - 591 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_012 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_013 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_012: \
__asm _emit 0xb9 \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_005: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_004 + 979 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_005 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_006 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_005: \
__asm _emit 0x81 \
__asm _emit 0x97 \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_006: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_005 - 1835 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_006 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_007 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_006: \
__asm _emit 0x81 \
__asm _emit 0x8c \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_007: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_006 + 2925 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_007 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_008 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_007: \
__asm _emit 0x81 \
__asm _emit 0xaf \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_003: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_002 - 3561 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_003 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_004 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_003: \
__asm _emit 0x0f \
__asm _emit 0x8B \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_008: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_007 - 1082 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_008 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_009 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_008: \
__asm _emit 0xf7 \
__asm _emit 0x81 \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_002: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_001 - 1064 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_002 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_003 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_002: \
__asm _emit 0x0f \
__asm _emit 0x88 \
__asm JMP_CODE_TAB2_F_0000_CALLCODE_011: \
__asm sub dword ptr[esp], offset JMP_CODE_TAB2_F_0000_RETCODE_010 + 3022 \
__asm jz JMP_CODE_TAB2_F_0000_RETCODE_011 \
__asm call JMP_CODE_TAB2_F_0000_CALLCODE_012 \
__asm JMP_CODE_TAB2_F_0000_RETCODE_011: \
__asm _emit 0x81 \
__asm _emit 0xb5