首页
社区
课程
招聘
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
发表于: 2007-9-17 20:35 3275510

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

2007-9-17 20:35
3275510
收藏
免费 29
支持
分享
打赏 + 12.00雪花
打赏次数 2 雪花 + 12.00
 
赞赏  HlccFu   +10.00 2021/04/23 越来越好!
赞赏  黑币哥   +2.00 2021/01/07 感谢分享~ 想送看雪高手们黑币,可收?
最新回复 (1209)
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
351
木有VC6.0,只有VS2K3,所以。。。。
#include <stdio.h>

unsigned long AddEx(unsigned long first,...){
        unsigned long res=first,*next=(&first)+1;
        while(res&&*next){//Break if first==0 or res is overflow
                res+=*(next++);
        }
        return res;
}

int main(){
        printf("%lu\n",AddEx(1,2,3,0));
        printf("%lu\n",AddEx(1,2,0));
        printf("%lu\n",AddEx(1,0));
        printf("%lu\n",AddEx(0));
}
2009-1-30 16:45
1
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
352
看了看前面有人做出来的,发现可能真的是题目不一样还是怎么的,有一些不一样。
第一题,我的分析
main中
push ecx或sub esp,4或sub esp,xx,xx=4K,k>1
其中&m==esp
然后call test,
ret_addr,push ebp,共两个DWORD,共8个bytes,
然后push ecx或者sub esp,4,那么
((DWORD)&t)+12就指向m
所以我写的是*((int *)(((unsigned long)&t)+0xc))=t;
也许还因为我没有VC6.0,拿的是VS2K3做测试,还有不一样吧。
上传的附件:
2009-2-1 17:33
1
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
353
还有就是觉得拿汇编做的,感觉很搓,碰到个不支持内联汇编的编译器就编译不通过了。
题目说的是测试C语言能力,不是汇编语言能力。。。。
2009-2-1 17:42
1
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
354
武汉的朋友有服气!
看了,不明白!
2009-2-2 22:29
1
雪    币: 236
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
355
产出好多精华贴啊,给看雪也带来很多资源,顶~!
2009-2-2 23:08
1
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
356
很想报名参加学习,

就是不知道是否可以通过网络学习?
2009-2-3 22:11
1
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
357
好厉害,呵呵。先恭喜下了!
2009-2-5 11:50
1
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
358
我在上海哦  想参加培训。。 学习。。。。555
2009-2-9 10:39
1
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
359
费用很高吗??????学业只是初中的可以学习吗?
难学吗??????
2009-2-15 21:34
1
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
360
我没有一点基础
2009-2-18 12:40
1
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
361
支持楼主,祝您成功!
2009-2-20 14:57
1
雪    币: 200
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
362
现在还能报名吗? 我可以从第2或者3阶段学
2009-2-22 16:10
1
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
363
支持楼主为祖国石化培养新人
2009-2-22 23:34
1
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
364
不说什么
来帮忙顶下
2009-2-28 20:30
1
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
365
我去过。做过一份题目。
2009-3-1 18:40
1
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
366
看技术,很强,呵呵,祝楼主越办越好,支持
2009-3-2 15:37
1
雪    币: 193
活跃值: (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
367
有网上远程授课吗? 想去 但路太远
2009-3-4 16:13
1
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
368
啊,武汉真的有这方面的培训吗?太好了,不知道学费贵不贵哦
2009-3-5 14:00
1
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
369
i=0   
name[10]={1,2,3,4,5,6,7,8,9,10}
栈中情况

EBP-2C   1      NAME[0]
EBP-28   2      NAME[1]
EBP-24   3      NAME[2]
EBP-20   4      NAME[3]
EBP-1C   5      NAME[4]
EBP-18   6      NAME[5]
EBP-14   7      NAME[6]
EBP-10   8      NAME[7]
EBP-0C   9      NAME[8]   /*这里好象是从右到左,数组10个元素*10*4/   
EBP-8    0ah   NAME[9]   10
EBP-4                i=0       /*[ EBP-4]这里就是放的i
i<=10        /*是要放11个元素NAME数组了什么办呢
看下面

I=0
i++      
ECX,[EBP-4]/*ecx里放的是I的递增量*/

name[i]=0
ebp-2c+ecx*4,0/*这就是把0放到的单元里的地址EBP-2C+0*4这样写是为了更明白本来是EBP+ECX*4-2C
要是递增到1那就是EBP-2C+1*4了
最后那第11个0就放到了EBP-4里去了
就是这样
哎还是学习要深入才能不一字半解,不过这也让我明白了该如何学程序了,谢谢出题者谢了
2009-3-5 19:53
1
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
370
name[i]=0
ebp-2c+ecx*4,0/*这就是把0放到的单元里的地址EBP-2C+0*4这样写是为了更明白本来是EBP+ECX*4-2C
要是递增到1那就是EBP-2C+1*4了
这样写有的烦/改成   2C-ECX*4    当ECX =0  那就是2C里放第一个0  当I++ 是ECX=1
2C-1*4=28  第2个0放到了28大家可以看上面下面的就自己看了OK
2009-3-5 20:00
1
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
371
真想去学啊,就是没钱
2009-3-5 20:06
1
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
372
如果那位先分析写出来,谢了反正有空就在做下吧哎又要用到汇编调试了VC++才知道强大哎
2009-3-5 20:09
1
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
373
Main()起的情况
  
     push ebp              /*假设 EBP是1000  ESP  3000
     Mov ebp, esp           / 这条指令下移了4*EBP=ESP=2996    ESP  2996
     SUB  ESP ,40         /*2996-40=2956      ESP  2956
CALL TEST()时            /*esp=2952跳了 4个字节   EBP=2996
TEST()调用情况

     push ebp              /* EBP是2996保存上一个EBP  ESP  2952
     Mov ebp, esp           /*EBP=ESP=2948    ESP  2948
     SUB  ESP ,40         /*2948-40=2908     ESP  2908
     _asm
        esp+?=2996       esp 2908/*要加88
      push   t=[ebp-4]
        sub esp, a4       /* 上面加了 下面就要减不管什么变化总的还是要最后还原成 2948  再加上48 POP EBP ESP   POP EBP(2996)
      没想到栈是这样递减的 好象就是这样调用 ESP EBP 返回上一级的 ESP  EBP数
这样的资料学起来就是好   自学苦啊  还是到武汉去算了这样快些
2009-3-6 16:16
1
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
374
void test()
{
  int t;
  scanf("%d", &t);
  _asm
  {
    add esp, 0xA8
    push t
    sub esp, 0xA4
  }  
}

void main()
{
  int m;
  test();
  printf("m=%d", m);
}为什么是这样呢?
2009-3-7 23:11
1
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
375
当然这里有人不用汇编写了段C,其实也是看了汇编再写的C代码,他要是不调试汇编我看也写不出来C代码
2009-3-8 10:18
1
游客
登录 | 注册 方可回帖
返回
//