遇到----一个CALL应该如何写.doc

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
遇到----一个CALL应该如何写

遇到一个CALL应该如何写?1 Q( s2 l6 N7 f: [ ? ??J( L??K7 [) W/ p! e这个是写一个内挂不可避免的问题.刚初学的朋友可能会不知道如何入手.想起刚学这方面的时候,绕过很多弯路,现在把一些经验写出来给大家参考参考吧,不是很高深的东西,但我觉得对某些人很有帮助. v1 y( x( O2 n ( _/ L8 L+ C2 p6 t% z??L+ yCALL是什么? ??K??f1 H2 I6 u2 W4 y% m5 B# J% G! F# W8 A8 ? CALL是汇编中的一个指令,CPU执行这条指令会执行2个动作 一:压入EIP入栈 二:跳转到后面的地址. 跟RETN指令配合就实现了汇编中子程序的作用,通常我们常说的写CALL就是 调用游戏中已经存在的功能子程序. 5 p2 i- T4 ?; `3 `6 y: g c9 s+ h( Q H$ o2 w( t: T 比如说/ U, |; J0 W l1 M$ V; d 6 z1 b$ D R# L) G) r I: Y ?% Bviod myadd (int a, int b) 3 S( }, n0 m) c- v, z# ~2 Z: k{( q% r2 d e! x5 L int c=a+b; 9 j5 O1 [2 J g, V} % w2 g E; x. N; w3 n* d0 _2 [3 }; Q( u g: Z3 L% F 这是一个简单的子程序,当我们用程序语言调用那么就是 myadd(5,4); 4 s, B9 M- k; X2 L K而在汇编里则是6 Y) P+ O) Y) x ~0 `5 y push 4 6 Y0 Z( a h/ X/ k* C6 vpush 5 # n7 X$ @ A+ I: d3 h2 i( H1 Bcall myadd * [1 [/ {+ ?* e; b2 o. ]3 \1 O) X$ h- F ` A 编译好的程序不会存在什么函数变量和子程序. 只有1和0 . 所以编译器会给myadd 分配一个地址.在反汇编里就是 / P. F. P* O, R s0 d??x8 l* v push 4 9 K$ G7 u! n apush 5% z- x/ A: I, ]6 i1 F4 i0 x) x call ******** 3 j. o5 {1 [- c 2 v: F3 l3 w) `% U CALL ******* 并不单单就是子程序的调用,他还可以调用 函数 API., g??_, c% V H- R4 @* U ; _+ V1 T8 A# R9 J/ e* a, L9 x 如函数 send. L2 g7 |4 H: [/ X3 \ ( o# D) _8 u6 v n% h d2 ]1 t6 \send( , W+ l2 ` z b# x- Z% Ksocket; i7 m6 }% y??r t buf;7 O0 h0 ?5 z8 v4 e! c! L len;* v, q y3 S* G??G! I flags;% d1 ] M3 Y7 k )* J( a, ^, E! L/ s6 j0 r% c( | ( | U. d9 J, M: _ \5 e( u# Z4 B) z# t+ j! c, d??Y0 D0 C 在汇编里调用就是 3 j1 C0 A; r) h% E6 n$ u1 apush flags 9 J3 P% O ~- w1 Wpush len! W1 l??K3 p3 c2 {??h??d push buf7 N; c6 h5 s+ H push socket 5 ] p$ @/ U U# @7 xcall send : P: d0 J6 j. s5 d7 ^ $ B- `: V- h3 U9 F3 G% [0 {1 J p9 l- C2 E??e1 I ( u. C* v3 d8 o( r; ^参数在反汇编里表现形式. ( ~, J. O1 k??X$ ^8 C- b$ }/ V, N4 m( A. M 在汇编或反汇编里参数都是压入堆栈来供CALL调用的.而CALL以[ESP+*]的形式读取参数.# U8 C??W/ s9 ~0 V0 K 5 |0 y, m4 }# s2 V9 V1 ^??W如: : v4 m w) p+ F- iviod myadd(int a,int b) - K2 B w) l K{ F2 U3 z) e; @; a??~ n int c=a+b : j. r??W* V4 e: o; v w* N* y! }} : Z0 U0 [6 c+ M* P3 t4 l1 H3 N+ X8 s: q myadd(4,5);, w9 P3 p2 i6 r: \ 9

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档