当前位置: 首页 > article >正文

2023-04-14 lua + C动态库交叉debug

lua + C动态库交叉debug

  • 前言
  • 一、前期准备
  • 二、lldb注入进程
  • 总结


前言

lua 可以方便的使用 C 编译的 dll 库, 但是先前由于只写 C 或 lua, 较少联合调用, 不太清楚如何进行交叉 debug, 也是各种搜索, 完全没有相关信息, 只好自己摸索, 所幸不难, 窗户纸一捅就破.


一、前期准备

我是用vscode + lldb + clang 工具链编译share dll, 前期没有注意, 编译 dll 时候少了一个参数, 更准确说是参数不那么正确, 导致的低级错误.

由于编译dll时, 没有加 -g, 这个低级错误导致了根本没有断点可以执行. 改正之后发现也不对, 几经周折, 参数改为 -glldb, 专为lldb做符号的debug版本, 终于OK了.

clang -glldb -shared unicodeLua.c -o E:\Learn\unicodeLua.dll -llua -Wall 

当然这都是后话, 最先处理的是 debug 注入.

二、lldb注入进程

因为一直是单文件, 单语言开发, 没有使用过 attach 注入的方式进行 debug 所以先学习了一下这种操作, 需要在 vscode 下加一个 attach 方式的 launch 设置:

{
            "type": "lldb",
            "request": "attach",
            "name": "Attach",
            "pid": "${command:pickMyProcess}", // use ${command:pickProcess} to pick other users' processes
        }

非常简单, 没有编译选项, 只有附加需求和pid选择.

lua端可以用正常的独立文件debug, 所以无需改 launch

具体步骤, 首先启动 lua 的 debug 程序, 当在进程中发现 lua.exe 已经加载, 启动C语言的 lldb debug程序, 用attach选项, 此时会弹出选择进程对话框, 选择 lua.exe 进程, 通常它的名字会跟在很长一段vscode插件目录之后, 搜索lua就可以找到, 同时包含lua的进程可能有多个, 一定要选 lua.exe , 这才是lua解释器, 连接后所有C程序断点暂时不可用, 直至到 lua 开始引入 dll 库, 此时会自动跳到C程序的断点, 继续一步一步的debug就可以了.

另外我用的debug插件是Lua Debug actboy168, 好像并不是所有debug插件都支持交叉debug, 所以如果不行, 可以换一个插件看看.


总结

希望通过这篇文章, 帮助你解锁不同语言相互调用的交叉debug技能, 前面风雨交加, 我辈毅然任重而前行.


http://www.kler.cn/news/9939.html

相关文章:

  • 逆向入门--何为OEP
  • 故障注入的方法与工具
  • 【GITLab】docker部署GitLab
  • 如何在ubuntu上搭建minio
  • 灌区量测水系统
  • C++ Primer第五版_第十一章习题答案(31~38)
  • 程序员必用的6个代码对比神器附下载地址
  • Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等
  • NumPy 初学者指南中文第三版:1~5
  • 【三十天精通Vue 3】 第三天 Vue 3的组件详解
  • 一位腾讯在职7年测试工程师的心声...
  • 为什么会有JMM?从0到1一次性说清楚
  • Adaptive AUTOSAR——State Management(VRTE 3.0 R21-11)
  • 笔记 | python蓝桥算法复习(预习)基础知识
  • 快排非递归 归并排序
  • spring(七):事务操作
  • docker 安装nocas
  • 亚马逊云科技Amazon Linux 2023正式发布,将为您提供长期支持
  • 使用Xftp连接Windows7虚拟机
  • webgl-图形非矩阵旋转
  • GooglePlay马甲包过审详细流程
  • Java基础(六)面向对象编程(进阶)
  • 2023-04-14 算法面试中常见的查找表问题
  • Available-Python-Tuf
  • ChatGPT大规模封号+停止注册?最火概念会凉吗?
  • 【Camera HW介绍】
  • AI绘画——Stable Diffusion模型,变分自编码器(VAE)模型 , lora模型——调配设置与分享
  • shell的简单信息-执行、变量命名、变量的数据类型
  • git 命令:工作日常使用
  • 基于CBC、ECB、CTR、OCF、CFB模式的AES加密算法