C程序的函数调用可视化研究

  • 格式:pdf
  • 大小:251.23 KB
  • 文档页数:4

it x y it ,it n G (n n n Ma m)
{ it e , ; n mp r t
i(< fn m)
{ tmp 1 n =I ; m =tmp e 1 ; l l e ;
栈 空间来 保 存 函数 栈 帧 , 底 指针 通 常 也 叫栈 基址 . 栈 是存 储 在 E P寄存 器里 的 ,S B E P寄存 器 中存 储 栈顶 指 针 ,在 x 6平 台上 8
调 用 进 行 可 视 化 展 示 , 而 有 助 于 对 复 杂 函 数 调 用 特 别 是 递 归 调 用 中 的 算 法 设 计 、 区使 用 、 码 优 化 等 内容 的 理 从 栈 代
解。
关 键词 : 函数调 用; 可视 化 ; 归函数 ; 栈 ; 址解析 递 堆 地
中 图 分 类 号 :P 1 T32 文 献标 识码 : A 文 章 编 号 :6 2 7 0 (0 0 1- 0 3 0 17 — 8 0 2 1 ) 1 0 7 — 3
例 如 ,下 面 程 序 的 功 能 是 求 两 个 正 整 数 的 最 小 公 倍 数 , 文
件 名 为 Mi G .。 n bC
, Mi Gbc n
渊用Mi G 前的E P nb S
OOl2 FF2C
0 2 F2 0l F 8
0O1 2FF24
返 地址
ESP
OO12FF2 0

图 1 man函 数 栈 桢 i
作者 简介 : 宋新爱 ( 9 3 , , 1 7 一)女 陕西岐 山人 , 士 , 硕 西安 石油 大 学计 算机 学院讲 师 , 究 方向 为管 理信 息 系统 与 计算 机 网络 ; 宏 (9 8 ) 男 , 研 王 16 一 , 陕西 西 安 人 , 士 . 安 石 油 大 学 计 算 机 学 院 副 教 授 , 究 方 向 为 办 公 自动 化 系统 , 硕 西 研 多媒 体 内容 管 理 系统 。

it ; n P
P=Ma G ( , ;eu (n x y n m) rtr ( 六m)p n /)
v i i ( odman )
n ,b; { ita
pit ” 输 入 两 个 正 整 数 : , \” ; r f 请 n( a bn )
saf ” , ” &a b ; cn(%d %d , ,& )
} | EBP
现场保 护 , 括保护调 用 函数的运 行状态 和返 回地址 , 将 参数 包 并

按 逆序入栈 。获取 被调 函数 栈桢 , 将局 部变 量按顺 序入 栈 , 执行 函数体 。函数调用 后恢复现 场 , 包括获 取调 用 函数返 回地址 , 将 局 部变量 、 函数形 参 出栈 , 函数返 回值保 留 c u e sd o h
1 函 数 调 用 实 现 机 制
函 数 是 C 程 序 的 基 本 单 位 ,单 个 函 数 调 用 操 作 所 使 用 的 栈 部 分 被 称 为 栈 帧 在 执 行 程 序 时 , 作 系 统 为 进 程 分 配 一 块 操

w i (r:n hl ( e %m) 0 != )
{ n=m; m =r ;}
r t r nl e u n ;
it n b it ,it n MiG ( n nn m)
函数 时 , E P减去 相应 字 节数 获 取形 参 存储 空间 , 将 S 再将 被 调 函数 的参数表 入栈 . 然后 跳转 到被 调 函数 的人 口点 。C C 编译 / 器 默认 的 C函 数调用 方 式 是 函数 参 数按 照从 右 向左 的顺 序 人
栈 , 且 由函数调 用 者负 责清 除栈 中 的参数 。 当调用 函数 时将 并 m i 数 的 E P减 去 相 应 字 节 数 获 取 被 调 函 数 的 栈 桢 E P和 an函 S B E P. 上 一 层 的 E P入 栈 保 存 , 及 将 被 调 函 数 的 局 部 变 量 S 将 B 以
由 此 可 知 函 数 调 用 过 程 可 分 为 三 个 阶段 : 甬数 凋 用 前 进 行
pit ” 们 的 最 小 公 倍 数 为 : 、” MiG ( , ) ; r f 它 n( %dn , n b a b )
EBP
0 01 2FF8 0
0 1 FF C 0 2 7
O01 2FF78
第9 第 1 期 卷 1
软 件 导 刊
S fwae Gude ot r i
Vo1 . 9No 1 .1
NO 2 O V. 01
C程序 的函数调 用可视化研 究
宋新 爱 . 王 宏
( 西安石 油 大学 计 算机 学院 , 陕西 西安 7 0 6 ) 10 5 摘 要 : 分析 C程序 的 函数 调 用机 制 , 阐述 函数调 用可视 化 实现 技 术 , 并利 用 G U编 译 器工 具链跟 踪 函数 , 函数 N 对

7 ・ 4
EBP 00l2 FF1C
按顺 序入 栈 。被调 函数 返 回时 , E P加上 相应 字节 数 归还 被 将 S
凋 函 数 栈 空 间 . 且 E P移 至 调 用 函 数 栈 顶 , 出 参 数 及 主 调 并 S 弹 函 数 压 在 栈 中 的 代 码 执 行 指 针 ( I )跳 同 主 调 函 数 , } 调 EP , 再 扫主 函数恢 复 到调 用前 的栈 。
这 个 栈 是 从 高 地 址 向 低 地 址 增 长 的 ma i 数 是 C程 序 执 行 的 人 口点 ,它 会 首 先 得 到 一 个 栈 n函 帧 , 由 E P和 E P分 别 指 向 栈 底 和 栈 顶 . 后 将 当 前 的 代 码 并 B S 然 执 行 指 针 ( I ) 栈 , 及 将 局 部 变 量 按 顺 序 入 栈 。 进 入 被 调 EP 压 以 当