首页
社区
课程
招聘
[求助]断下后,堆栈无返回地址,如何知道跳转来自何处?
发表于: 2015-9-23 21:46 4574

[求助]断下后,堆栈无返回地址,如何知道跳转来自何处?

2015-9-23 21:46
4574
如题,一般call过来的跳转,堆栈都有返回地址吧

我碰到一个断点,断下后,堆栈无返回地址,如何知道该跳转来自何处?

学调试时间不长,请教各位:是不是直接jmp过来的?但是直接按指令搜索也搜索不到?

这一把是什么情况?如何应对?感激!

我在论坛搜到了两篇相关帖子,但都没有给出有效办法:
http://bbs.pediy.com/showthread.php?t=59965
http://bbs.pediy.com/showthread.php?t=143098

我和以上两个帖子总的主人有相同的疑惑!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 237
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
加断点然后重新执行一遍。
2015-9-25 16:10
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多线程?
2015-9-25 17:03
0
雪    币: 180
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
你确定这是一个call?如果是的话,肯定会有返回地址的,如果是栈没有标出返回值,在ret的地方,也能知道返回到哪里吧。
2015-9-25 17:51
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
执行到返回没反应! 你好可否加我QQ好友QQ55256620,希望能得到你更多的帮助,谢谢!
2015-9-26 21:28
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
6
不奇怪呀!  因为你看到的 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
2015-9-26 22:25
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
多谢,请指点以下,解决这类问题的有效方法!
2015-9-28 17:13
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
8
你在调试器断下的地方看到的汇编代码处,用IDA静态分析一下,花指令一般就藏在中间。最后的结果会是:静态分析的汇编指令系列 与 调试器某一时刻显示的汇编指令系列不同。 剩下的你自己去好好挖掘吧!
2015-9-28 22:50
0
游客
登录 | 注册 方可回帖
返回
//