关于c语言和汇编语言之间的对应

乐观的柏小柏 2014-03-06 12:45:23
我有.c源代码,有对应的汇编代码?怎么样才能知道汇编代码哪一行对应源代码的哪一行,我需要自己写程序来做?不需要其他的工具?求大神指导!!!
...全文
592 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
滴答滴答D 2014-03-23
  • 打赏
  • 举报
回复
引用 8 楼 asdwt123 的回复:
引用 1 楼 It_way 的回复:
鄙人也 表示关注。
在linux下编译的时候加-g,然后就可以实现了
-g 不是在程序中加入调试信息么! 和 汇编有什么关系?
乐观的柏小柏 2014-03-17
  • 打赏
  • 举报
回复
引用 1 楼 It_way 的回复:
鄙人也 表示关注。
在linux下编译的时候加-g,然后就可以实现了
百曉生 2014-03-06
  • 打赏
  • 举报
回复
引用 6 楼 menzi11 的回复:
[quote=引用 3 楼 czarten 的回复:] 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
你不要抢赵老师的台词啊.......[/quote] lz代码长不长啊?不长的话可以单步执行一一试着对应吧,如果程序很简单,应该差不多能基本能对应上
menzi11 2014-03-06
  • 打赏
  • 举报
回复
引用 3 楼 czarten 的回复:
眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
你不要抢赵老师的台词啊.......
赵4老师 2014-03-06
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。
xiaohuh421 2014-03-06
  • 打赏
  • 举报
回复
如果你是想从 C代码到汇编 那么你需要了解编译器, 相当于要写一个编译器才可能对上汇编代码. 如果想从汇编到C代码, 那么你就需要了解反汇编. 先翻译成C代码,再与C代码作某种对比. 不管是要做哪一种, 工作量都是非常的大, 估计一个人完不成. 我现在还没有发现一个工具能把汇编变成C代码得, IDA只能把汇编转换成"伪C代码"
你怎么了熊吉 2014-03-06
  • 打赏
  • 举报
回复
眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
xiaohuh421 2014-03-06
  • 打赏
  • 举报
回复
这个应该不能做到一对一, 编译器会把代码做优化. 如果想看源码与之对应的汇编. 比较好的方式是在IDE中查看反汇编代码. 比如VS中, 调试运行程序 , 在代码中下断点, 运行到断点处时, 按组合键: Alt+8
m_btnImg.SetCheck(BST_CHECKED);
002C56B4  push        1    
002C56B6  mov         ecx,dword ptr [this] 
002C56B9  add         ecx,56Ch 
002C56BF  call        WTL::CButtonT<ATL::CWindow>::SetCheck (2C7C40h) 
	BOOL bOk = m_btnImg.SetWindowText(TEXT("ABCDEFG"));
002C56C4  push        3D10F4h 
002C56C9  mov         ecx,dword ptr [this] 
002C56CC  add         ecx,56Ch 
002C56D2  call        ATL::CWindow::SetWindowTextW (2D0FD0h) 
002C56D7  mov         dword ptr [bOk],eax 
滴答滴答D 2014-03-06
  • 打赏
  • 举报
回复
鄙人也 表示关注。

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧