免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: jyhhappyjyh
打印 上一主题 下一主题

C语言中是什么控制着函数嵌套调用 [复制链接]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
11 [报告]
发表于 2011-09-06 20:44 |只看该作者
回复 8# jyhhappyjyh


    那個宏擴展成了什麼?把最終的可執行文件 disassemble 出來看看。

论坛徽章:
0
12 [报告]
发表于 2011-09-07 09:28 |只看该作者
回复 11# MMMIX

我将boot.S、main.c和test.c的编译顺序调整为test.c、main.c和boot.S,整个调用过程就可以了。
但是仍然会提示 warning: cannot find entry symbol _start,当时我想_start可能是系统链接的默认入口,所以
我将入口点名字_start修改为_bootstart,重新编译仍会提示: warning: cannot find entry _bootstart!
这是为什么呢?我的链接脚本中明明指定了entry point为_bootstart,怎么会找不到呢?
反汇编代码如下:

  1. MTest:     file format elf32-bigmips

  2. Disassembly of section .jcr:

  3. 80060000 <__JCR_END__+0x7ffa0000>:
  4. 80060000:        00000000         nop
  5. Disassembly of section .init:

  6. 80060004 <_init>:
  7. 80060004:        27bdffe0         addiu        sp,sp,-32
  8. 80060008:        afbf0014         sw        ra,20(sp)
  9. 8006000c:        0c01802f         jal        800600bc <_ftext+0x94>
  10. 80060010:        00000000         nop
  11. 80060014:        0c018078         jal        800601e0 <fa+0x28>
  12. 80060018:        00000000         nop
  13. 8006001c:        8fbf0014         lw        ra,20(sp)
  14. 80060020:        03e00008         jr        ra
  15. 80060024:        27bd0020         addiu        sp,sp,32
  16. Disassembly of section .text:

  17. 80060028 <_ftext>:
  18. 80060028:        27bdfff0         addiu        sp,sp,-16
  19. 8006002c:        afbf0004         sw        ra,4(sp)
  20. 80060030:        afb00000         sw        s0,0(sp)
  21. 80060034:        3c028006         lui        v0,0x8006
  22. 80060038:        90430288         lbu        v1,648(v0)
  23. 8006003c:        14600016         bnez        v1,80060098 <_ftext+0x70>
  24. 80060040:        3c108006         lui        s0,0x8006
  25. 80060044:        8e02026c         lw        v0,620(s0)
  26. 80060048:        8c430000         lw        v1,0(v0)
  27. 8006004c:        50600009         beqzl        v1,80060074 <_ftext+0x4c>
  28. 80060050:        3c020000         lui        v0,0x0
  29. 80060054:        24420004         addiu        v0,v0,4
  30. 80060058:        0060f809         jalr        v1
  31. 8006005c:        ae02026c         sw        v0,620(s0)
  32. 80060060:        8e02026c         lw        v0,620(s0)
  33. 80060064:        8c430000         lw        v1,0(v0)
  34. 80060068:        1460fffb         bnez        v1,80060058 <_ftext+0x30>
  35. 8006006c:        24420004         addiu        v0,v0,4
  36. 80060070:        3c020000         lui        v0,0x0
  37. 80060074:        24420000         addiu        v0,v0,0
  38. 80060078:        10400005         beqz        v0,80060090 <_ftext+0x68>
  39. 8006007c:        24030001         li        v1,1
  40. 80060080:        3c048006         lui        a0,0x8006
  41. 80060084:        0c000000         jal        80000000 <object.2+0x7ff3fa88>
  42. 80060088:        24840270         addiu        a0,a0,624
  43. 8006008c:        24030001         li        v1,1
  44. 80060090:        3c028006         lui        v0,0x8006
  45. 80060094:        a0430288         sb        v1,648(v0)
  46. 80060098:        8fbf0004         lw        ra,4(sp)
  47. 8006009c:        8fb00000         lw        s0,0(sp)
  48. 800600a0:        03e00008         jr        ra
  49. 800600a4:        27bd0010         addiu        sp,sp,16
  50. 800600a8:        27bdfff0         addiu        sp,sp,-16
  51. 800600ac:        afbf0000         sw        ra,0(sp)
  52. 800600b0:        8fbf0000         lw        ra,0(sp)
  53. 800600b4:        03e00008         jr        ra
  54. 800600b8:        27bd0010         addiu        sp,sp,16
  55. 800600bc:        3c020000         lui        v0,0x0
  56. 800600c0:        27bdfff0         addiu        sp,sp,-16
  57. 800600c4:        3c048006         lui        a0,0x8006
  58. 800600c8:        3c058006         lui        a1,0x8006
  59. 800600cc:        24420000         addiu        v0,v0,0
  60. 800600d0:        afbf0000         sw        ra,0(sp)
  61. 800600d4:        24840270         addiu        a0,a0,624
  62. 800600d8:        10400003         beqz        v0,800600e8 <_ftext+0xc0>
  63. 800600dc:        24a50290         addiu        a1,a1,656
  64. 800600e0:        0c000000         jal        80000000 <object.2+0x7ff3fa88>
  65. 800600e4:        00000000         nop
  66. 800600e8:        3c028006         lui        v0,0x8006
  67. 800600ec:        8c430000         lw        v1,0(v0)
  68. 800600f0:        10600007         beqz        v1,80060110 <_ftext+0xe8>
  69. 800600f4:        24440000         addiu        a0,v0,0
  70. 800600f8:        3c020000         lui        v0,0x0
  71. 800600fc:        24420000         addiu        v0,v0,0
  72. 80060100:        10400004         beqz        v0,80060114 <_ftext+0xec>
  73. 80060104:        8fbf0000         lw        ra,0(sp)
  74. 80060108:        0c000000         jal        80000000 <object.2+0x7ff3fa88>
  75. 8006010c:        00000000         nop
  76. 80060110:        8fbf0000         lw        ra,0(sp)
  77. 80060114:        03e00008         jr        ra
  78. 80060118:        27bd0010         addiu        sp,sp,16
  79. 8006011c:        27bdfff0         addiu        sp,sp,-16
  80. 80060120:        afbf0000         sw        ra,0(sp)
  81. 80060124:        8fbf0000         lw        ra,0(sp)
  82. 80060128:        03e00008         jr        ra
  83. 8006012c:        27bd0010         addiu        sp,sp,16

  84. 80060130 <fd>:
  85. 80060130:        27bdfff0         addiu        sp,sp,-16
  86. 80060134:        afbe0000         sw        s8,0(sp)
  87. 80060138:        03a0f021         move        s8,sp
  88. 8006013c:        3c02b804         lui        v0,0xb804
  89. 80060140:        8c420008         lw        v0,8(v0)
  90. 80060144:        38420002         xori        v0,v0,0x2
  91. 80060148:        3c01b804         lui        at,0xb804
  92. 8006014c:        ac220008         sw        v0,8(at)
  93. 80060150:        3c02b804         lui        v0,0xb804
  94. 80060154:        8c420008         lw        v0,8(v0)
  95. 80060158:        03c0e821         move        sp,s8
  96. 8006015c:        8fbe0000         lw        s8,0(sp)
  97. 80060160:        03e00008         jr        ra
  98. 80060164:        27bd0010         addiu        sp,sp,16

  99. 80060168 <fc>:
  100. 80060168:        27bdfff0         addiu        sp,sp,-16
  101. 8006016c:        afbf0004         sw        ra,4(sp)
  102. 80060170:        afbe0000         sw        s8,0(sp)
  103. 80060174:        0c01804c         jal        80060130 <fd>
  104. 80060178:        03a0f021         move        s8,sp
  105. 8006017c:        03c0e821         move        sp,s8
  106. 80060180:        8fbf0004         lw        ra,4(sp)
  107. 80060184:        8fbe0000         lw        s8,0(sp)
  108. 80060188:        03e00008         jr        ra
  109. 8006018c:        27bd0010         addiu        sp,sp,16

  110. 80060190 <fb>:
  111. 80060190:        27bdfff0         addiu        sp,sp,-16
  112. 80060194:        afbf0004         sw        ra,4(sp)
  113. 80060198:        afbe0000         sw        s8,0(sp)
  114. 8006019c:        0c01805a         jal        80060168 <fc>
  115. 800601a0:        03a0f021         move        s8,sp
  116. 800601a4:        03c0e821         move        sp,s8
  117. 800601a8:        8fbf0004         lw        ra,4(sp)
  118. 800601ac:        8fbe0000         lw        s8,0(sp)
  119. 800601b0:        03e00008         jr        ra
  120. 800601b4:        27bd0010         addiu        sp,sp,16

  121. 800601b8 <fa>:
  122. 800601b8:        27bdfff0         addiu        sp,sp,-16
  123. 800601bc:        afbf0004         sw        ra,4(sp)
  124. 800601c0:        afbe0000         sw        s8,0(sp)
  125. 800601c4:        0c018064         jal        80060190 <fb>
  126. 800601c8:        03a0f021         move        s8,sp
  127. 800601cc:        03c0e821         move        sp,s8
  128. 800601d0:        8fbf0004         lw        ra,4(sp)
  129. 800601d4:        8fbe0000         lw        s8,0(sp)
  130. 800601d8:        03e00008         jr        ra
  131. 800601dc:        27bd0010         addiu        sp,sp,16
  132. 800601e0:        27bdfff0         addiu        sp,sp,-16
  133. 800601e4:        3c028006         lui        v0,0x8006
  134. 800601e8:        afb00000         sw        s0,0(sp)
  135. 800601ec:        24420278         addiu        v0,v0,632
  136. 800601f0:        afbf0008         sw        ra,8(sp)
  137. 800601f4:        afb10004         sw        s1,4(sp)
  138. 800601f8:        8c44fffc         lw        a0,-4(v0)
  139. 800601fc:        2403ffff         li        v1,-1
  140. 80060200:        10830008         beq        a0,v1,80060224 <fa+0x6c>
  141. 80060204:        2450fffc         addiu        s0,v0,-4
  142. 80060208:        00801821         move        v1,a0
  143. 8006020c:        2411ffff         li        s1,-1
  144. 80060210:        0060f809         jalr        v1
  145. 80060214:        2610fffc         addiu        s0,s0,-4
  146. 80060218:        8e020000         lw        v0,0(s0)
  147. 8006021c:        1451fffc         bne        v0,s1,80060210 <fa+0x58>
  148. 80060220:        00401821         move        v1,v0
  149. 80060224:        8fbf0008         lw        ra,8(sp)
  150. 80060228:        8fb10004         lw        s1,4(sp)
  151. 8006022c:        8fb00000         lw        s0,0(sp)
  152. 80060230:        03e00008         jr        ra
  153. 80060234:        27bd0010         addiu        sp,sp,16
  154. 80060238:        27bdfff0         addiu        sp,sp,-16
  155. 8006023c:        afbf0000         sw        ra,0(sp)
  156. 80060240:        8fbf0000         lw        ra,0(sp)
  157. 80060244:        03e00008         jr        ra
  158. 80060248:        27bd0010         addiu        sp,sp,16

  159. 8006024c <c_main>:
  160. 8006024c:        27bdfff0         addiu        sp,sp,-16
  161. 80060250:        afbf0004         sw        ra,4(sp)
  162. 80060254:        afbe0000         sw        s8,0(sp)
  163. 80060258:        03a0f021         move        s8,sp
  164. 8006025c:        3c02b804         lui        v0,0xb804
  165. 80060260:        8c420000         lw        v0,0(v0)
  166. 80060264:        34420003         ori        v0,v0,0x3
  167. 80060268:        3c01b804         lui        at,0xb804
  168. 8006026c:        ac220000         sw        v0,0(at)
  169. 80060270:        3c02b804         lui        v0,0xb804
  170. 80060274:        0c01806e         jal        800601b8 <fa>
  171. 80060278:        8c420000         lw        v0,0(v0)
  172. 8006027c:        03c0e821         move        sp,s8
  173. 80060280:        8fbf0004         lw        ra,4(sp)
  174. 80060284:        8fbe0000         lw        s8,0(sp)
  175. 80060288:        03e00008         jr        ra
  176. 8006028c:        27bd0010         addiu        sp,sp,16

  177. 80060290 <_bootstart>:
  178. 80060290:        3c1c8007         lui        gp,0x8007
  179. 80060294:        279c82e0         addiu        gp,gp,-32032
  180. 80060298:        3c048006         lui        a0,0x8006
  181. 8006029c:        248422ac         addiu        a0,a0,8876
  182. 800602a0:        0080e821         move        sp,a0
  183. 800602a4:        08018093         j        8006024c <c_main>
  184. 800602a8:        3c1f0000         lui        ra,0x0
  185. Disassembly of section .fini:

  186. 800602ac <_fini>:
  187. 800602ac:        27bdffe0         addiu        sp,sp,-32
  188. 800602b0:        afbf0014         sw        ra,20(sp)
  189. 800602b4:        0c01800a         jal        80060028 <_ftext>
  190. 800602b8:        00000000         nop
  191. 800602bc:        8fbf0014         lw        ra,20(sp)
  192. 800602c0:        03e00008         jr        ra
  193. 800602c4:        27bd0020         addiu        sp,sp,32
  194. Disassembly of section .data:

  195. 800602c8 <__dso_handle>:
  196. 800602c8:        00000000         nop
  197. 800602cc:        80060280         lb        a2,640(zero)
  198. Disassembly of section .eh_frame:

  199. 800602d0 <__EH_FRAME_BEGIN__+0x7ff9fd90>:
  200. 800602d0:        00000000         nop
  201. Disassembly of section .ctors:

  202. 800602d4 <__CTOR_LIST__>:
  203. 800602d4:        ffffffff         sdc3        $31,-1(ra)
  204. 800602d8:        00000000         nop
  205. Disassembly of section .dtors:

  206. 800602dc <__DTOR_LIST__>:
  207. 800602dc:        ffffffff         sdc3        $31,-1(ra)
  208. 800602e0:        00000000         nop
  209. Disassembly of section .sdata:
  210. Disassembly of section .lit8:
  211. Disassembly of section .lit4:
复制代码

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
13 [报告]
发表于 2011-09-07 21:34 |只看该作者
回复  MMMIX

我将boot.S、main.c和test.c的编译顺序调整为test.c、main.c和boot.S,整个调用过程就可以 ...
jyhhappyjyh 发表于 2011-09-07 09:28



    你反匯編的這個程序入口在什麼地方?(readelf -h elf.name 可以看到)另外,反匯編的結果和你的 C 代碼也對不上呀。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP