关于 C 语言中内联汇编 _asm int 3 编译失败的问题?

playerbbs163 2012-10-11 05:08:43
学习驱动开发, 需要在DEBUG版本的驱动中做一个手工的中断, 便于用WINDBG调试.
结果在以下代码中加了一个 _asm int 3 语句 (size_t i 位于 _asm int 3 之后), WDK 始终编译报错,
error C2143: syntax error : missing ';' before 'type'
error C2065: 'i' : undeclaredidentifier

多次尝试之后, 将局部变量的定义语句, 移到了汇编语句之前, 结果就编译成功了.

WHY?? 这个太奇怪了, 不知道哪位大侠能指点一下??


NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
//编译成功
size_t i; //局部变量定义必须放在 _asm int 3 之前

#if DBG
_asm int 3
#endif

//编译报错
size_t i; //局部变量定义必须放在 _asm int 3 之前


// 所有的分发函数都设置成一样的。
for(i=0;i<IRP_MJ_MAXIMUM_FUNCTION;i++)
{
driver->MajorFunction[i] = ccpDispatch;
}

// 支持动态卸载。
driver->DriverUnload = ccpUnload;

// 绑定所有的串口。
ccpAttachAllComs(driver);

// 直接返回成功即可。
return STATUS_SUCCESS;
}
...全文
605 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-02-21
  • 打赏
  • 举报
回复
__asm int 3 DebugBreak The DebugBreak function causes a breakpoint exception to occur in the current process so that the calling thread can signal the debugger and force it to take some action. If the process is not being debugged, the search logic of a standard exception handler is used. In most cases, this causes the calling process to terminate because of an unhandled breakpoint exception. VOID DebugBreak(VOID) Parameters This function has no parameters. Return Values This function does not return a value. Microsoft Specific Causes a breakpoint in your code, where the user will be prompted to run the debugger. void __debugbreak(); Requirements Intrinsic Architecture __debugbreak x86, IPF, x64 Header file <intrin.h> Remarks The __debugbreak compiler intrinsic, similar to DebugBreak, is a portable Win32 way to cause a breakpoint. Note: When compiling with /clr, a function containing __debugbreak will be compiled to MSIL. asm int 3 causes a function to be compiled to native. For more information, see __asm.
  • 打赏
  • 举报
回复
直接用api吧
void WINAPI DebugBreak(void);
mxliang83 2013-02-20
  • 打赏
  • 举报
回复
我也发现同样的问题了。
AnYidan 2013-02-20
  • 打赏
  • 举报
回复
c89 必须在函数开始声明变量
语言赤月神社模块.ec 易语言经典模块 2012.6.11 增加 MASM汇编 (将MASM格式的汇编指令转成字节集) MASM反汇编 (将字节集代码转为MASM格式汇编指令) 修正 汇编 (优化执行速度) 反汇编(优化执行速度) 置入汇编 (改用MASM指令 废除OD引擎指令) 内核汇编(优化执行速度 增加错误指令提示) 内核反汇编(优化执行速度 修复错误指令书写) 修正 Asm (支持了高级指令的书写) 置CE作弊脚本_汇编 (改用MASM指令 废除OD引擎指令) 注入作弊脚本_汇编 (改用MASM指令 废除OD引擎指令) 2012.5.21 修复 各种BUG我修复了很多 我自己都记不得了 ╮(╯▽╰)╭ 增加 命令 申请自身内存 Asm_RtlMoveMemory 修改虚拟保护 NtRtlMoveMemory 申请虚拟内存 高级汇编类 { retn Call_DWORD_Ptr_EAX Call_DWORD_Ptr_EBP Call_DWORD_Ptr_EBX Call_DWORD_Ptr_ECX Call_DWORD_Ptr_EDI Call_DWORD_Ptr_EDX Call_DWORD_Ptr_ESI Call_DWORD_Ptr_ESP } 增强 APIHOOK DetourHook 内存类 读写内存操作 已经全面加强 采用非ntdll.dll的API 自写API 可以过检测(大概~~~~) { 读写内存操作 (调试器下各种硬件/INT3断点都无法下断检测) } 类 XMPlay 废弃 读自身整数型内存 写自身整数型内存 Hook内存读写类 汇编内存读写类 NrWriteVirtualMemory NrReadVirtualMemory 2012.4.29 修复 植入代码 网页访问类 增加 命令 内联汇编 { 置汇编 ASM编译 ASM执行 ASM取代码 } 正则表达式 类 屏蔽类 脚本类 正则表达 DerourHook 驱动模拟类 底层模拟类 消息钩子类 热键编辑框 地址寄存器类 DLL全局注入类 2012.3.6 修复 【保护类】终极反调试 (加强) 【内存类】读基址 (替换成PID) 【进程类】取进程路径 (替换成PID) 【进程类】多线程优化 (增加返回值) 增加 【内核类】 NrReadVirtualMemory NrWriteVirtualMemory 【指针类】 到子程序指针 取子程序地址 汇编_取指针地址 【调用类】 植入代码 调用子程序_寄存器 取模块函数入口_汇编 GetProcAddress_汇编 GetModuleHandleA_汇编 删除 【注入类】取模块函数地址
光盘: ├─chap01....................................第1章 PE文件格式的深入分析 │ └─PEDump.zip ;Matt Pietrek的PEDUMP程序 │ ├─chap02....................................第2章 PE分析工具编写 │ ├─PEInfo_example ;PE分析工具样例 │ └─Test ;TestSH.exe,这个程序的OptionalHeader的大小为0xD0 │ ├─chap03....................................第3章 Win32 调试API │ ├─内存补丁 │ │ ├─进程间内存共享机制应用.txt │ │ ├─使用Dr X调试寄存器框架程序.txt │ │ └─bpm example code ;yoda的实例,演示利用Ntdll.ntcontinue作为跳板在入口点处断 │ └─脱壳机 │ ├─Unlock.asm ;脱壳机的源程序 │ ├─unlock.exe ;己编译好的脱壳机程序 │ └─locked.exe ;被tElock 0.98保护的记事本程序 │ ├─chap04....................................第4章 Windows下的异常处理 │ ├─sehRelease │ │ ├─sehdef.inc ;完整的异常代码列表 │ │ ├─s1.asm ;例子1.演示Final型异常处理及参数获取 │ │ ├─s2.asm ;例子2.演示Per_Thread型异常处理 │ │ ├─s3.asm ;例子3.演示Per_Thread型异常处理的嵌套处理 │ │ └─S4.ASM ;例子4.演示异常处理的堆栈展开 │ ├─ring ;例子5.演示Windows9x进特权级Ring0 │ ├─singlestep ;例子6.演示SEH实现单步自跟踪 │ └─veh ;例子7.VEH代码演示 │ ├─chap05....................................第5章 反跟踪技术 │ ├─Anti-Debug ;5.1 反调试技术 │ │ ├─MeltICE ;句柄检测 │ │ ├─Back Door ;SoftICE后门指令 │ │ ├─int 68 ;int68子类型 │ │ ├─ICECream ;ICECream子类型 │ │ ├─NticeService ;判断NTICE服务是否运行 │ │ ├─int1 ;INT 1 检测 │ │ ├─UnhandledExceptionFilter ;利用UnhandledExceptionFilter检测 │ │ └─int41 ;INT 41子类型 │ ├─DetectBreakpoint ;5.2 断点检测技术 │ │ ├─SEHbpx ;利用SEH防范BPX断点 │ │ ├─SEHbpm ;利用SEH防范BPM断点 │ │ └─IsBPX ;检测函数首地址 │ ├─Anti-Loader ;5.3 反加载技术 │ │ ├─TEB ;利用TEB检测 │ │ ├─IsDebuggerPresent ;利用IsDebuggerPresent函数检测 │ │ └─CheckParentProc ;检查父进程 │ ├─Anti-Monitor ;5.4 反监视技术 │ │ ├─AntiProcDump ;窗口方法检测ProcDump │ │ └─Anti-Filemon&Regmon ;句柄检测Filemon和Regmon │ ├─Anti-Disassemble ;5.5 反静态分析技术 │ │ ├─pushre ;扰乱汇编代码 │ │ ├─SMC ;SMC技术实现 │ │ └─花指令 ;花指令样例 │ ├─CRC ;5.7 文件完整性校验 │ │ ├─磁盘文件校验 │ │ │ ├─add2crc32 ;计算文件CRC32的工具,可以将结果写进文件里 │ │ │ └─crc32 ;待校验的程序 │ │ ├─内存映像校验 │ │ │ ├─memcrc32 │ │ │ │ └─src │ │ │ │ ├─add2memcrc32 ;计算PE文件代码区块CRC32的工具,可以将结果写进文件里 │ │ │ │ └─memcrc32 ;需要校验内存代码数据的程序 │ │ │ └─Detect Breakpoint ;校验内存的片段代码的样例 │ │ └─CRC原理 ;arbin翻译的《CRC原理及其逆向分析方法》 │ └─codeEncrypt ;5.8 代码与数据结合技术 │ ├─codeEncrypt ;代码与数据结合的实例 │ └─tools ;Encrypter.exe工具及其源码 │ ├─Chap06....................................第6章 加壳软件编写 │ ├─prot ;本章实例加壳工具prot v0.46及其源码 │ ├─aPLib引擎 ;aPLib压缩引擎 │ └─TestUseVC ;Spring的加壳程序综合运用的实例 │ ├─Chap07....................................第7章 如何让壳与程序融为一体 │ ├─7.1 欺骗检查壳的工具 │ │ ├─aspack212压缩 │ │ ├─aspack212压缩后更改入口代码 │ │ ├─aspack压缩后再修改过的壳加壳 │ │ ├─aspack压缩后再自己加壳 │ │ ├─实例(没加壳) │ │ ├─自己加的壳 │ │ ├─自己的加壳工具 │ │ │ ├─原版壳的程序 │ │ │ └─更改后的壳的程序程序 │ │ └─tools │ │ ├─fi ;测试用的FileInfo工具 │ │ └─aspack212 ;测试用的Aspack加壳工具 │ ├─7.2判断自己是否给脱壳 │ │ ├─7.2.1 判断文件尺寸 │ │ ├─7.2.4 使用存储映像文件检查标记 │ │ ├─7.2.2 使用同步对象检查标记 │ │ ├─7.2.3 使用原子(ATOM)检查标记 │ │ ├─7.2.5 使用线程优先权检查标记 │ │ ├─7.2.6 使用外部文件检查标记 │ │ └─7.2.8 注入一个定时器 │ └─7.3 使用SDK把程序和壳溶为一体 │ ├─test ;实例 │ └─sdk壳的程序 │ ├─chap08....................................第8章 Visual Basic 6 逆向工程 │ ├─example1 ;演示虚函数表的概念 │ ├─example2 ;如何处理事件的虚函数表 │ ├─example3 ;利用SEH反加载 │ ├─example4 ;演示如何更改程序结构 │ ├─example5 ;本例简单说明了如何直接修改vb6程序的控件属性值 │ ├─example6 ;一个VB6 P-code Crackme分析实例 │ └─example7 ;VB“自锁”功能实现的实例 │ ├─附录A.....................................附录A 在Visual C++使用内联汇编 │ ├─InlineASM ;内联汇编实例 │ └─SeparateASM ;VC 调用 MASM 独立汇编实例 │ └─附录B.....................................附录B 在Visual Basic使用汇编 ├─TweakVB ;TweakVB 控件(http://www.tweakvb.com/) ├─VBInlineAsm ;VBInlineAsm控件 └─Compile Controller ;Compile Controller控件 ;(http://www.fawcette.com/archives/premier/mgznarch/vbpj/1999/11nov99/jc1199/jc1199.asp)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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