能力值:
( LV7,RANK:100 )
|
-
-
2 楼
call的大小??啥子意思?
|
能力值:
( LV9,RANK:610 )
|
-
-
3 楼
不解
您是指call的那个函数的大小
还是指call指令的大小?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
楼主没表达清楚意思啊
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
帮你找点call的执行过程!:
a.段内直接转移,具体格式:CALL 过程名。此时CS不入栈,IP的内栈入栈,入栈后再将加上目的地址与CALL指令的下一条指令的偏移地址之差值就可以转移到目的地址,详细过程:SP-2=>SP;将堆栈指针SP减2(SP)<=IP;将IP进栈IP+偏移地址之差;转到目的地址b.段内间接转移,具体格式:CALL OPRD,那么在这里OPRD可以寄存器或内存单元,它的具体实现过程:SP-2=>SP;将堆栈指针SP减2(SP)<=IP;将IP进栈IP<=(OPRD);转到目的地址同a一样,CS不入栈c.段间直接转移,具体格式:CALL 过程名 [FAR],此时CS,IP均要入栈,详细的实现过程:SP-2=>SP;将堆栈指针减2(SP)<=CS;将CS入栈SP-2=>SP;将堆栈指针再减2(SP)<=IP;将IP入栈;装入新的CS,IPIP<=过程入口的偏移地址CS<=过程入口的段地址d.段间间接转移,具体格式:CALL OPRD [FAR],此时CS,IP均要入栈,OPRD是32位,你知道在8086中没有32位寄存器。因此,这里的OPRD一定是存储单元,高16位是CS的值,低16位是IP值,详细的实现过程:SP-2=>SP;将堆栈指针减2(SP)<=CS;将CS入栈SP-2=>SP;将堆栈指针再减2(SP)<=IP;将IP入栈;装入新的CS,IPIP<=(OPRD+2,OPRD+3)CS<=(OPRD,OPRD1)
|
能力值:
( LV9,RANK:180 )
|
-
-
6 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
你问一个函数的大小?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
楼主你得到答案了吗,我也想知道
|
能力值:
( LV9,RANK:180 )
|
-
-
9 楼
6楼的答案不行吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
长度反汇编引擎
|
能力值:
( LV4,RANK:50 )
|
-
-
11 楼
完全没听懂你要问什么,要不可以回答你了
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
那一行回答太普通了 ,大家都还以为仅仅是一行字而已~~~后面把网址加上应该会好很多
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
不是太懂楼主问的什么
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
S大大给的那篇文章应该没问题,但是……太复杂了……一般来说函数不会跳到很远的地方再跳回来吧,这时Jcc只是在函数内部跳,如果统计函数大小的话完全可以无视掉它们,直接从函数的起始地址开始一个字节一个字节的统计,遇到0xC3就结束,应该能完全绝大多数任务了。简单写了一下:#include int add(int a,int b){ return (a+b);}int main(int argc,char *argv[]){ int len = 1; //记录长度 unsigned char *ps = (unsigned char *)&add; //byte ptr [xxx] while(*ps != 0xC3) { num++; ps++; } printf("result = %d bytes.\n",num); return 0;}统计结果是11,反汇编一下没问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
格式调不好,lz自己整理一下格式吧,郁闷死了,为什么论坛会自己在前面跟后面添加《p》《/p》呢?把格式完全弄乱了。
|
|
|