反汇编逆向工程程序员面试题,很考人水平

来源:互联网 发布:techmark 如何知乎 编辑:程序博客网 时间:2024/05/22 03:04

叙述TCP和UDP协议的特点和区别,并举一个具体实现做例子说明(比如某个功能使用了tcp连接,以及为什么选择使用它
     答:TCP协议提供了一种可靠的数据传输服务,它是一种面向连接的数据传输协议。在

数据传输之前,通信节点之间必须建立起连接。为确保正确地接收数据,TCP协议要求在
目标电脑成功收到数据时发回一个确认(即ACK)。如果在某个时限内未收到相应的ACK,
      将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复。但是,接收电脑
可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。UDP协议是一种面向无
    连接的数据传输服务,它不能保证数据包以正确的顺序被接收。该协议不能保证数据准确

无误地到达目的地。UDP在许多方面非常有效。当某个程序的目标是尽快地传输尽可能多的信息时

(其中任意给定数据的重要性相对较低),可使用UDP协议。QQ、ICQ等聊天软件使用UDP协议发送消息。

               关键字static的作用是什么?

在C语言中,关键字static有三个明显的作用:
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 
        大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。

                                                     引用与指针有什么区别?
  1) 引用必须被初始化,指针不必。
  2) 引用初始化以后不能被改变,指针可以改变所指的对象。
  2) 不存在指向空值的引用,但是存在指向空值的指针。
进程和线程的差别?
  线程是指进程内的一个执行单元,也是进程内的可调度实体.
  与进程的区别:
  (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
  (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
  (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
  (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

                                  12个球一个天平,知道有一个球与其他11个球质量不同,称3次找出那个球

答:把12个球分别编上号,并随意分成3组       分别为:
(1、2、3、4)..①;(5、6、7、8)..②;(9、10、11、12)..③.
第一称:把①与②组放在天平两端称。结果有两种情况:一种是平;另一种是不平,不妨假设组①重于组②。
                   先来看平的情况。则1-8号球全部正常。次品必在组③,即在9-12号球中。 
            在9-12号球中任选3个,不妨选(9、10、11)...④,存下12号球:在正常球1-8号球中也任选3个,不妨选(1、2、3)...⑤。
对④与⑤进行第二次称。结果有三:④=⑤;④>⑤;④<⑤。 
                如果④=⑤时,次品是12号球。第三次用12号球与任意一个正常球称,则可立马将12号次品球是偏重、还是偏轻正确判断出来 。 
          如果④>⑤时,则次品球必在组④的3个球内,且重于正常球。这时,在9-11号3个球中任选两个(不妨设是9与10号球),再放到天平上称第三次。这时有三种情况:9=10;9>10;9<10。
            当9=10时,次品必是11号球,它比正常球要重;当9>10时,则偏重的9号球是次品;当9<10时,偏重的10号球是次品。
                        同理可证④<⑤时的情况。
对于另一种不平的情况改次再证明。 继续证明. 
          当不平时有两种情况,即组①>组②;组①<组②。
现在来讨论当组①>组②的情况。即(1、2、3、4)重于(5、6、7、8)。
                 将组①与组②中的球进行调整,并重新编组:组①中留下3号球,拿出4号球,并把1、2球改放到组②中去,并添入正常球一个,不妨设为9号球;组②中留下7号球,拿出6、8号球,并把5号球改放到组①中去,编成新组: (5、3、9)…③;(1、2、7)…④。
                           现在进行第二称,即把组③和组④放在天平上称。结果有三:
                          ③=④;③>④;③<④。 
           当③=④时。则次品球必在拿出去的几个球内,即在4、6、8号3个球内,且知4号球至少重于6号、8号球中的一个。这时用6号球与8号球进行第三次称,结果是6号=8号;6号>8号;6号<8号。当6号=8号时,则4号球是次品球,且它比正常球要重;当6号>8号时,则次品是8号球,它比正常球要轻;当6号<8号时,则次品是6号球,它比正常球要轻。
          当③>④时。说明:变动后的组仍保持着原有组的重轻本质,这是由组内保持不变的球造成的,则次品球必在3号与7号球之间,且知道3号球一定重于7号球。这时进行第三次称:从3、7号球中任选一与正常球称,不妨选3号球与正常球9号称。结果有:3号=9号;3号>9号;3号<9号。当3号=9号时,则次品是7号球,它比正常球要轻;当3号>9号时,则次品是3号球,它比正常球要重;当3号<9号时,又由3号>7号,则3号与7号均是次品,这不可能,因为与条件中规定的次品只有一个矛盾。 
        当③<④时。这是由交换了组别的球造成的,因此,次品球必在1、2、与5号之间,且5号球至少轻于1、2号球中的一个。这时用1、2号球进行第三次称,。结果有:1号=2号;1号>2号;1号<2号。当1号=2号时,次品是5号它比正常球要轻;当1号>2号时,这时次品是1号,它比正常球要重;当1号<2号时,又5号也小于2号,则次品是2号,它比正常球要重。 
                        同理可证:组①<组②。

 

 DirectX SDK由哪几部分组成?     答Direct3d DirectXInput DirectSound Dmusic Dplay Dshow Dsetup DMediaObject Xinput XACT                                           

如果你现在不得不重新学习一门计算机语言,你将怎样开始着手?

 

将下面的C语法代码改写为PASCAL语法的代码

struct structA

{

    int a;

    int b;

    union

    {

         int c;

         int d;

     }e;

};

下面这个程序的输出是什么?

#include <stdio.h>

#define PrintInt(expr)  printf("%s:%d/n",#expr,(expr))

int main()

{

      int y = 100;

      int *p;

      p = malloc(sizeof(int));

      *p = 10;

      y = y/*p; //dividing y by *p

      PrintInt(y);

      return 0;

}                                                    答:输出是100

写出你所知道的Windows下Socket通讯模型

                                        答:完成端口 异步 同步.......

Windows可执行文件格式中,16个数据表目包含的内容有哪些?(至少写出3个)

                            写出下列字符的ASCII编码   "MZ" = 4550         "PE" = 4A5D

         _cdecl   _standcall   pascal这三种调用规则有什么区别?

 

写出IA32结构下的八个寄存器名称

   EAX    EBX  ECX  EDX   ESI   EDI   EBP  ESP

                                 IA32结构下控制寄存器有多少个?

             答:3个  CS   DS  ES

Windows环境下KeServiceDescriptorTable   KeServiceDescriptorTableShadow的区别是什么?

 

      2个外形不同的瓶子,各装800毫升水,另外还有1个300毫升的杯子,现在有4个人,

不限制喝的次数,想办法让每个人都正好喝到400毫升水

原创粉丝点击