http://www.rootkit.com/newsread.php?newsid=885 Ruining the Rustock.C rumors and myths and Kaspersky Lab role
1 序言
2 Rustock 的新特点,集合的更多信息,制作检测工具。
3 Rootkits roadmap(略)
4 Alexander Gostev 扮演的游戏角色(略)
5 结束语(略)
1序言
Rustock。。。。邪恶的心脏。
它真的无法检测到吗?当然不是的。我们有没有可能在Rustock 运行的时候将它删除掉吗?这是肯定的。在2006年,Rustock不能被检测到这只是一个谣言而已。因为在那个时候,只有一些不大成熟的rootkit检测软件。那么我们怎么去检测它呢?我们需要用到驱动程序吗?它HOOK了那么多的内核函数,是个狡猾的角色。。。。。
现在让我们立刻构筑一个用户态的检测器(小巧和简单)来对抗这只“不可检测”的Rustock。
整个故事是从2005年末开始的,这一年末对于反病毒技术人员来说是毫无希望的,但现在依然记忆犹新。也就是说,
rootkits以极快的速度摧毁了反病毒工具。Hacker Defender 为了对付这种情形带来了很多新的素材资料。这是一个技术战争新时代的开始。当然我们也不能说这是一场战争,因为双方只是为了保护自己和只要双方的任何一方不存在另一方也就不存在。(被使用来隐藏的东西也能用来检测)。
这些真的很难说,就像AV当时为什么在很长时间内不发起一场合适的反抗一样。这是一个想法与实现的决定性时间。当时已经70%的计算机被感染了,你知道吗?在不考虑其他反病毒公司时这个数目一直在稳定的增长。这是被他们绝对接受的事实。但是他们一点都不反抗,因为他们想要的只是----你口袋里的钱。你认为他们会真的是帮助一些人吗?其实在他们眼里---你最好是给他们钱然后闭嘴。这就是他们的政策,这就是商业。
这就是他们不能保护和揭示新的威胁的时候就有其他的公司出来代替他们,这就是最近3年很多反病毒软件的崛起的原因。。。。。。。
AV公司已经敌对rootkits 和Rustock 特别是。。。。
这种赌注叫---“主动防御”,它的主要目标就是让有害的软件不能正确的运行,工作,因为主动防御能分析出这些软件的行为是否具有有害性(这是很容易使系统不稳定的)。 Kaspersky 实际上有创新的地方,它在有名的反病毒监控器中构建了coded HIPS 和结合了一些相关工作原理。任何事件都是无法离开操作系统的管理的。实现这些功能有很多方法,很多HIPS 和AV 内置 HIPS 模块选中SSDT,HOOK 了很多的函数。。不信,看Kaspersky的驱动文件klif.sys 。
下面所有函数列表都是从 DriverEntry 原始调用的,位于某处的偏移量是0003CXXX ,依据 klif 版本而定。
InitializePhase0();
InitializeResourcesList();
v15 = FltRegisterFilter(P, &v24, &dword_3A1A0);
String2.Buffer = (PWSTR)v15;
if ( v15 < 0 )
{
ShutdownWhileInitializationError();
return (unsigned int)String2.Buffer;
}
v7 = Drink_KLINSKOE();
….stripped not interested info….
v18 = InitializeFsFilterCommunication(&String2);
v11 = v18;
if ( v18 >= 0 )
{
v12 = CreateAndRegisterDevicesAndLinks((PDRIVER_OBJECT)P, &String2);
if ( v12 >= 0 )
{
RtlInitUnicodeString((LSA_UNICODE_STRING *)&v39, &word_3C65A);
stru_3A27C.Length = 0;
v19 = (_WORD)String2.Length + v39 + v10->Length + 2;
stru_3A27C.MaximumLength = (_WORD)String2.Length + v39 + v10->Length + 2;
v13 = (WCHAR *)ExAllocatePoolWithTag(PagedPool, v19, 0x387A4C4Bu);
stru_3A27C.Buffer = v13;
if ( v13 )
{
… stripped uninterested info….
if ( v22 >= 0 )
{
InitializePhase1();
Kakayata_hyinya1();
v23 = Kakayata_hyinya2();
HIBYTE(P->Size) = v23;
if ( v23 )
HIBYTE(P->Size) = sub_14F0C();
Kakayata_hyinya3();
if ( HIBYTE(P->Size) )
{
OwnAndFuckTheSystem();
SetRegistryCallback();
v11 = FltStartFiltering(dword_3A1A0);
We interested in the following entries
INIT:0003C4BD call OwnAndFuckTheSystem
INIT:0003C4C2 call SetRegistryCallback
v3 = PsSetCreateProcessNotifyRoutine(NotifyRoutine, 0);
v2 = v3;
if ( v3 >= 0 )
{
byte_38A76 = 1;
v4 = PsSetCreateThreadNotifyRoutine(sub_1CE78);
v2 = v4;
if ( v4 >= 0 )
{
byte_38A77 = 1;
v5 = PsSetLoadImageNotifyRoutine(nullsub_1);
v2 = v5;
if ( v5 >= 0 )
{
byte_38B14 = 1;
HookSSDTEntry(&dword_38EFC, sub_1DBD6, "NtOpenProcess");
HookSSDTEntry(&dword_39004, sub_1DAB2, "NtAdjustPrivilegesToken");
HookSSDTEntry(&dword_39014, sub_1DC7E, "NtTerminateProcess");
HookSSDTEntry(&dword_38EEC, sub_1DCF0, "NtWriteVirtualMemory");
HookSSDTEntry(&dword_38F14, sub_1DDAE, "NtCreateThread");
HookSSDTEntry(&dword_38FF8, sub_1D010, "NtSaveKey");
HookSSDTEntry(&dword_38EE8, sub_1D320, "NtRestoreKey");
HookSSDTEntry(&dword_38F0C, sub_1D1BE, "NtReplaceKey");
if ( IsWindowsXP || IsWindows2000 )
{
HookSSDTEntry(&dword_38F10, sub_1D4EE, "NtCreateKey");
HookSSDTEntry(&dword_38EF8, sub_1D60C, "NtSetValueKey");
HookSSDTEntry(&dword_38EE0, sub_1D72A, "NtQueryValueKey");
HookSSDTEntry(&dword_38F18, sub_1D82A, "NtDeleteKey");
HookSSDTEntry(&dword_38EF4, sub_1D8EA, "NtQueryMultipleValueKey");
HookSSDTEntry(&dword_38F04, sub_1D9C8, "NtDeleteValueKey");
}
GetProcedureAddressEx(&dword_38A84, "PsGetThreadId");
GetProcedureAddressEx(&dword_38A88, "PsGetThreadProcessId");
GetProcedureAddressEx(&dword_38A8C, "PsGetProcessId");
if ( dword_38A84 )
{
if ( dword_38A88 )
{
HookSSDTEntry(&dword_38F08, sub_1DEAC, "NtSetContextThread");
if ( (unsigned __int8)HookSSDTEntry(&dword_38F00, sub_2115A, "NtResumeThread") )
HookSSDTEntry(&dword_39018, sub_21038, "NtSuspendThread");
if ( IsWindowsXP )
{
if ( dword_38A8C )
HookSSDTEntry(&dword_39010, sub_20F54, "NtSuspendProcess");
}
}
}
HookSSDTEntry(&dword_38AFC, sub_1F71E, "NtConnectPort");
HookSSDTEntry(&dword_38B00, sub_1FEB0, "NtRequestWaitReplyPort");
HookSSDTEntry(&dword_38AF8, sub_1F5EE, "NtSecureConnectPort");
HookSSDTEntry(&dword_38AE0, sub_1EFC6, "NtOpenFile");
HookSSDTEntry(&dword_38AE4, sub_1F16A, "NtCreateFile");
HookSSDTEntry(&dword_38AE8, sub_1F32C, "NtFsControlFile");
HookSSDTEntry(&dword_38AEC, sub_1F438, "NtDeviceIoControlFile");
dword_38A98 = SpecialHookSSDTEntry("NtQueryInformationThread");
if ( IsWindowsXP || IsWindows2003 )
{
if ( dword_3A264 & 0x40 )
sub_31978();
}
HookSSDTEntry(&dword_38FFC, sub_20936, "NtSystemDebugControl");
HookSSDTEntry(&dword_3900C, sub_209C4, "NtLoadDriver");
HookSSDTEntry(&dword_38FA0, sub_20A8C, "NtSetSecurityObject");
HookSSDTEntry(&dword_38A94, sub_1DF84, "NtClose");
HookSSDTEntry(&dword_39000, sub_20E52, "NtCreateSymbolicLinkObject");
HookSSDTEntry(&dword_38FB0, sub_20EA6, "NtSetSystemInformation");
HookSSDTEntry(&dword_38EF0, sub_20E7C, "NtOpenSection");
if ( dword_38A88 )
{
if ( dword_38A84 )
HookSSDTEntry(&dword_39008, sub_20BFA, "NtQueueApcThread");
}
HookSSDTEntry(&dword_38EE4, sub_2127C, "NtDuplicateObject");
}
}
}
Zamuta_c_CSRSS_chto_prosto_pizdec_delat_nehuy_bulo_vidat_ili_deti_dorvalis_do_ddk();
return v2;
}
正如你所看到的,现代反病毒软件使用了SSDT HOOING和大量的白痴行为。这些都有用吗?当然不一定。因为HIPS的概念在很多地方很容易受到攻击的。
第一:如果ROOTKIT已经进入内核安装在操作系统中,那么主动防御还能做什么呢?
第二:任何主动防御都必须要用户的参与,最终如果用户出现一个小小的错误的决定,整个HOOKING的杂技游戏就会受到威胁,
第三:安全性是一直存在的一个问题,因为它并不是操作系统的一部分。他们就是侵略者(行为上像某些 rootkits ),只是他们比某些流氓软件获得操作系统更多的承认而已。这也就是为什么大部分antimalware卖主很担心Vista 的变化。
第四:任何主动防御的执行,仅仅因为更多的必须的操作和更多细微的处理的出现。
看一个来自AV公司的极端的buggy soft 。难道你认为处理HOOKS在世界级的编程中是一件漂亮的事情吗?Notification 回调被广泛的运用于antimalware 解决方案中,当然也是很容易受到攻击的。Malware 能够在几步中就不预先通知的拜访和移除notifications 或者修补他们,或者调用他们或者修补在 antivirus驱动中的真正函数。相信这些通报简直就是没意义的。Configuration manager 回调在一些地方会受到愚弄。更进一步的说,他们更是被malware 使用而不是合法软件。哈哈,这些在Vista中都改变了。
你相信 flt filters吗?就让我们这样认为吧,在那里存在了可使用的file system parsers(在用户模式与内核模式中)。
2 Rustock 的新特点,集合的更多信息,制作检测工具
我们不会深入到细节中,但是现在就讲一些rootkit的新知识等等。
在单处理器与多处理器中Rustock的行为是不一样的。
它tcpip.sys中设置了更多的HOOKS,就像下面的方式一样,很多在tcpip.sys 的内部调用看起来都是这种形式:
call [F6633220] (例子)
或者
call [83882200] (例子)
Rustock 以下面的方法修补这些指令:用rootkit 处理函数的地址代替tcpip.sys 的地址。这个不是单纯的INLINE
HOOK,但是地址却改变钩住了。这真的是个好想法,因为这仅仅是四字节的改变,同时大部分antirootkit 都不能够跟踪到它的修改,因为它的实现比较特殊。它从修改的地方开始分析并且以一条指令转换地址,当然就是跳到自己的HOOKS中。
HOOKS的观察
其中一个检测这些狡猾的修改的方法是----从我们开始实时反汇编与分析的地方做一个映射。因为静态分析对当前的难题没有什么用。那么我们从IDA哪里得到所要映射的地方去反汇编呢?答案是简单的。首先是从驱动的入口。第二:导出表。我们也可以从驱动入口得到原始IRP处理函数。(他们大部分被分派在那里)。我们能够使用导入表和发现在代码中所有涉及到的函数。最根本的但不大容易完成的方法是:在代码内部搜索调用和分析所有种类的跳转指令。在做映射的时候我们经常会跟踪代码,当发现与原代码错配时----我们会搜索最接近映射的那个点和开始反汇编程序(我们会动态分析代码和跟踪钩子)。因为rootkits 的制作者能够做到跳回原来被调用的函数地址。理论上我们依靠跟踪钩子能够发现被隐藏的内核模块,但是这些都不是必须的,我们仅仅只要发现HOOS就可以了。最重要的一件事情是----我们必须选择UNHOOK的原文件,最好的方法就是有一个system components的数据库。但是数据库将会很大,操作又随系统而定的,因而我们简单的读原内容从我们的低层IO派遣驱动程序(这个不会使用到WINDOWS API和FS drivers 队列)。但是这个会给我们带来很多的兼容性问题(在不同的机子上和动态磁盘)。最后完成了,就像antirootkit 所称的“Resurrector”---分析HOOKS和找到真正的处理函数。
Rustock当然也有可能以同样的方式HOOK pIofCallDriver和设置两个在IAT拦截wanarp.sys -
NdisOpenAdapter/NdisCloseAdapter ,就像Rustock.B hooks. 使用自己实现的通过 IofCallDriver hook 。
IofCallDriver(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp
)
{
//….variables stack location checking etc – use your brains
//….Blah blah blah blah ….
Proc1 = (PHANDLER_PROC)DeviceObject->DriverObject->MajorFunction[v3->MajorFunction];
return Proc1(DeviceObject, Irp);
}
Rustock 也HOOKS了几个IDT入口(除了KiSystemService),但是这个没有得到公认,所以这部分就不检测了。
看看 pe386 的版本 buggy(先前的Rustock.B行为真的让人有点困惑,他依靠不同的硬件认证),它用INLINEHOOK对ntfs.sys,, fastfat.sys 过滤FSD 请求。
但是这里有一个BUG,在单处理器系统中它不能过滤一些信息,所以我们得到相等的文件大小在未被处理过的模式下和通过API的枚举。这很疯狂吗?假如你对null.sys (infected driver)调用GetFileSize ,它会返回一个假的文件大小。假如你调用NtQueryInformationFile,以FILE_STANDARD_INFORMATION 为参数,同样也会得到假的文件大小,但是这个 AllocationSize 域能得到真实的感染文件的大小。在FAT32 systems,Rustock过滤有更多的影响。 GMER v1.14 不能看到任何的HOOKS----因为它从磁盘中加载了假的映像。但是我们的文件请求试验被展现变态的过滤行为----它返回了AllocationSize= INFINITE或者为0。这是由于疯狂的广告信息,我们认为----它有必要创建一个特别的程序去检查驱动目录中的文件,因为以不同的检测重新得到所有文件卷的大小将会动态减少执行和增加错误的检测器数目。你能够在用户态中检测出错配的文件大小。
Rustock 在winlogon.exe 隐藏两个线程和在相同的winlogon.exe 中有两个句柄,两个在csrss.exe ,这些是在NtQuerySystemInformation过滤帮助下实现的。
这是非常容易的去绕过KiSystemService hook 。你可能知道内核模式的Zw* 函数的调用过程,给个例子:
.text:0042997C ; NTSTATUS __stdcall ZwQueryKey(HANDLE KeyHandle, KEY_INFORMATION_CLASS
KeyInformationClass, PVOID KeyInformation, ULONG KeyInformationLength, PULONG ResultLength)
.text:0042997C public ZwQueryKey
.text:0042997C ZwQueryKey proc near ; CODE XREF: sub_4A5CFC+13 p
.text:0042997C ; sub_4A5CFC+51p ...
.text:0042997C
.text:0042997C KeyHandle = dword ptr 4
.text:0042997C KeyInformationClass= dword ptr 8
.text:0042997C KeyInformation = dword ptr 0Ch
.text:0042997C KeyInformationLength= dword ptr 10h
.text:0042997C ResultLength = dword ptr 14h
.text:0042997C
.text:0042997C mov eax, 0A0h
.text:00429981 lea edx, [esp+KeyHandle]
.text:00429985 pushf
.text:00429986 push 8
.text:00429988 call KiSystemService
.text:0042998D retn 14h
.text:0042998D ZwQueryKey endp
所以Rustock能够过滤从用户态来的NT,内核态的ZW函数。因为 KiSystemService 被HOOK了。要绕过它必须从磁盘加载干净的ntoskrnl ,去做这些未处理的模式只是为了不在重复 Gmerek 的错误,重新认证它和使用原始函数。这些是相同的能够用在绕过所有的 HIPS hooks 和其他内核模式的HOOKING,极端的方法----在新加载的核心中在分配你的代码(依靠修补调用函数的地址)。这需要很多的工作,但是这是可能的。
毕竟我们能发现所有的HOOKS,发现一些感染的文件和在用户态中做这些事。我们能够做一个纯用户态的检测器来发现
这些HOOKS等等。。。。
Rustock.C中有名的保护(略)
3 Rootkit roadmap
将来还会出现什么?Rustock.D?。。。。。。
相关推荐
科技中介服务机构如何利用数智工具提升服务效率?.docx
科技中介服务机构如何利用数智工具提升服务效率?
R0注入DLL到R3进程
R0注入DLL到R3,貌似没有必要,也的确没有必要。以下代码只是为了验证R0调用NtQueueApcThread来注入DLL到R3进程中,没有什么神秘的东西,博大家一笑 #include PVOID pfn_BaseDispatchApc = NULL; PVOID pfn_LoadLibraryA = NULL; PVOID
基于非对称纳什谈判的多微网电能共享运行优化策略(Matlab代码实现)
基于非对称纳什谈判的多微网电能共享运行优化策略(Matlab代码实现)内容概要:本文档标题为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际上内容并未围绕Plecs或全桥LLC谐振变换器展开详细论述,而是罗列了大量基于Matlab/Simulink和Python的科研仿真项目标题及相关技术方向,涵盖电力系统、无人机控制、微电网优化、路径规划、状态估计、信号处理、电动汽车调度、电力电子变换器等多个领域。其中包括多种优化算法(如粒子群、遗传算法、NSGA-II)、控制策略(如PID、MPC、滑模控制)、仿真建模(如LLC谐振变换器、DAB变换器、PWM整流器)以及具体应用场景的研究实现。尽管提及“隔离型全桥LLC谐振变换器建模及参数设计资料”,但全文缺乏对该主题的具体描述、模型细节或仿真分析,仅作为条目之一出现。因此,该文档实质是一份科研项目资源清单或代码合集目录,而非针对某一主题的深入文章。; 适合人群:具备一定Matlab/Simulink或Python编程基础,从事电气工程、自动化、控制科学、电力电子、新能源系统等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①为科研工作者提供丰富的课题参考与复现资源,涵盖优化调度、控制系统设计、电力电子仿真等方向;②辅助完成硕士/博士论文、期刊论文复现、课程设计或项目开发,提升研究效率与创新性;③通过已有模型和代码快速搭建仿真平台,聚焦算法改进与性能优化。; 阅读建议:此文档应作为科研资源索引使用,读者可根据自身研究方向筛选相关条目,结合配套代码与参考资料进行深入学习与实践。对于希望研究全桥LLC谐振变换器的用户,需注意本文档未提供完整内容,建议查找标注的“仿真+设计报告+计算书”等附件资源以获取详细信息。
ARM 汇编调试入门:MOV、LDR 和 STR
掌握,最重要的是看清数据移动的方向。
高校技术转移办公室在推动成果转化过程中,如何高效完成技术成果的信息整合与价值挖掘.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
高校技术转移办公室人员,如何精准挖掘并分析企业的技术需求?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
汇编调试实战:DEBUG、Turbo Debugger、GDB 与 IDA
本文系统讲解汇编调试技巧,涵盖 DEBUG.exe 基础使用(寄存器查看、单步执行、内存操作)、Turbo Debugger 图形化调试,以及 GDB(32位Linux)和逆向工具(IDA/Ghidra)的高级应用。重点解析寄存器管理、断点设置、栈平衡检查与常见错误排查,如死循环、内存越界、栈崩溃等,强调静态分析识别函数边界、动态分析验证逻辑流程。掌握这些方法可高效定位底层缺陷,提升汇编开发能力。
隔离型全桥LLC谐振变化器建模及参数设计资料【仿真+设计报告+计算书】
内容概要:本文档是一套关于隔离型全桥LLC谐振变换器的综合性技术资料,系统涵盖了拓扑建模、参数设计、闭环控制策略及仿真验证等关键环节。资料整合了Simulink仿真模型、详细设计报告、Mathcad计算书以及控制算法说明文档,深入探讨了恒压恒流双闭环控制、变频与移相混合控制、软启动机制等核心技术,并提供了多应用场景实例,包括双向全桥LLC、多相交错LLC以及电动汽车V2G系统中的CLLC变换器设计。此外,配套资源还包含了多种先进控制与状态估计算法(如EKF、UKF、PF及其与神经网络融合算法)的Matlab实现代码,强化了科研复现与工程实践能力。; 适合人群:适用于电气工程、电力电子及相关专业的研究生、科研人员,以及从事高频开关电源、新能源变换器开发的工程师;需具备扎实的电路理论基础与一定的仿真软件操作经验。; 使用场景及目标:①支持全桥LLC变换器的高效参数设计与动态性能优化;②服务于高校或企业的科研项目,助力拓扑创新与控制系统开发;③作为毕业设计、学术论文或工业级产品原型开发的重要技术参考,提升系统效率、稳定性和响应速度。; 阅读建议:建议结合Simulink仿真模型与Mathcad计算书同步学习,重点关注谐振元件匹配、控制环路设计与系统稳定性分析,充分利用提供的Matlab/Simulink环境进行仿真调试与二次开发,深化理论认知与实际工程应用的融合。
10个完整汇编实例:排序、字符串与递归算法
本文提供10个16位实模式下可运行的汇编程序,涵盖冒泡排序、字符串反转、进制转换、阶乘与斐波那契计算等经典算法,附逐行解析。重点讲解寄存器使用、循环控制、栈操作、除法清零、符号比较、字符处理等核心技巧,揭示如PUSH/POP CX保全计数器、DIV前清DX、ASCII转换、溢出处理等关键细节。通过实践掌握底层逻辑,提升汇编编程能力。
三相交错并联Buck变换器+低纹波输出+双闭环控制仿真【附参考文献】(Simulink仿真实现)
内容概要:本文详细介绍了基于Simulink平台构建的三相交错并联Buck变换器仿真模型,重点实现了低输出纹波特性和双闭环控制策略。通过三相交错并联结构有效抑制输入与输出电流的纹波成分,显著提升电源系统的稳定性和电能质量;控制系统采用电压外环与电流内环相结合的双闭环架构,增强了系统的动态响应能力和抗干扰性能。资源包涵盖完整的Simulink仿真模型、技术说明文档及参考文献,具有较强的工程实践价值,适用于电力电子变换器的科研开发与教学实验。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校本科生、研究生及科研人员,尤其适合从事直流变换器拓扑结构与先进控制策略研究的专业人士,具备电路理论基础和Simulink仿真操作经验者更佳。; 使用场景及目标:①用于高效低纹波DC-DC变换器的拓扑创新与控制算法研究;②支撑科研项目中对多相并联技术与双闭环控制系统的性能验证;③作为课程设计、毕业设计或实验教学的技术范例,帮助深入理解交错并联的工作机理与闭环系统的设计方法。; 阅读建议:建议结合所提供的参考文献系统学习控制策略的理论依据,并动手调整仿真参数以观察系统在不同工况下的动静态响应特性,进一步掌握模型搭建、控制器设计与性能优化的全流程,强化理论与工程实践的融合能力。
考试遇到 Assistant API 考点时,该掌握哪些要点?
【摘要】聚焦阿里云大模型 ACP 认证中智能体 Assistant API 考点,我结合自学认证成功经验,分享复习攻略。先解析 assistants、threads 等五个核心组件作用与关系,点明各组件支持及不支持的方法,最后给出计算 Python 代码调用大模型次数的思路,助力考生攻克考点、顺利拿证 。
汇编子程序设计:参数传递、局部变量与调用约定
汇编代码模块化核心在于子程序设计。通过PROC/ENDP定义函数,结合栈帧管理(PUSH BP/MOV BP, SP)实现局部变量隔离与递归支持。参数传递可选寄存器(高效)或栈(多参适用),配合调用约定(如C、Pascal)规范参数入栈顺序与栈清理责任。掌握这些模式,便能编写结构清晰、可复用的汇编代码,迈向工程化开发。
安卓ai自动化脚本 Yyds.Auto实现 示例 纯ai图像识别自动点击脚本
纯ai识别实现自动化脚本
四级 Linux 应用与开发工程师笔记:8086 汇编、存储器、接口芯片和操作系统计算题整理
计算机四级 Linux 应用与开发工程师备考笔记:这门考的不是 Linux 命令,而是操作系统原理和计算机组成与接口两门课。组成与接口部分重点整理 8086 寻址方式、常考汇编指令和读程序题、存储器位扩展和字扩展、流水线时空图,接口芯片和中断按做题方法整理;操作系统部分整理高响应比优先、Clock 置换、两级页表、生产者消费者等考点,配真题讲解。
SAP 资产主数据屏幕增强:对比字段追加与子屏幕/页签 2 种方案优劣
本文深入对比了SAP资产主数据(AS01/AS03)屏幕增强的两种方案:字段追加与子屏幕/页签。从技术实现、业务适配、系统维护等维度分析各自优劣,提供方案选型决策树和混合方案实践建议,帮助企业在SAP实施中做出最优选择。
航空大数据——项目资源汇总及开源(四)
ADS-B项目开源大礼包
C 语言:编译 → 汇编 → 链接 → 加载运行
C程序从源码到执行经历预处理、编译、汇编、链接四阶段,生成ELF可执行文件,由操作系统加载至内存并由CPU执行。关键点包括:交叉编译生成ARM指令;链接分静态与动态;入口为_start而非main;动态库需-fPIC保证位置无关性;嵌入式环境下可能跳过OS直接运行。
GD32模拟IIC读写DVC1124
GD32模拟IIC读写集澈AFE芯片DVC1124
ARM 汇编入门(六):栈、子程序与 AAPCS64 调用约定
AArch64汇编中,函数调用依赖AAPCS64 ABI协议,确保跨语言、跨编译器的二进制兼容。核心规则包括:寄存器分工明确(caller-saved可覆盖,callee-saved需保存)、栈指针SP必须16字节对齐、栈帧大小为16字节倍数;参数通过X0~X7(整数)和V0~V7(浮点/SIMD)传递,超出则压栈;大结构体传指针,小结构体拆入寄存器;非叶子函数须保存LR(X30),否则返回错误;标准prologue/epilogue维护调用链与栈安全。掌握这些规则,方能实现手写汇编与高级语言的无缝协作,避
使用modelscope加载报错:ImportError: cannot import name ‘AutoTokenizer’ from ‘modelscope’...如何解决?| 提供多种解决方案
🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!
车载ECU底软测试:方法与技术的深度解析
底软是运行在 ECU 硬件平台上的基础软件,它为上层应用程序提供了硬件驱动、操作系统服务、通信协议栈等功能。底软的主要功能包括:硬件驱动:负责与 ECU 的各种硬件外设进行通信和控制,如 GPIO、UART、SPI、CAN 等。操作系统服务:提供任务调度、内存管理、中断处理等功能,确保系统的实时性和稳定性。通信协议栈:实现 ECU 与其他 ECU 或外部设备之间的通信,如 CAN、LIN、FlexRay 等。诊断服务:负责对 ECU 的故障进行诊断和处理,并将故障信息存储在故障码存储器中。
汇编分支与循环:JMP/LOOP/条件跳转的结构化编程
本文详解如何用汇编的JMP与条件跳转实现if/else、for、while等高级控制流。通过循环计数、嵌套循环及复杂判断的典型模式,展示底层指令如何构建逻辑结构。掌握LOOP指令与跳转组合,即可在无高级语法环境下实现高效、精准的程序控制,体现汇编语言的简洁与性能优势。
基于深度学习的航拍图像中地物变化检测
随着无人机技术的飞速发展,航拍图像成为获取地表信息的重要手段之一。然而,由于地球表面的不断变化,监测和识别航拍图像中的地物变化成为一项具有挑战性的任务。在人工智能领域,深度学习技术的兴起为地物变化检测提供了全新的解决方案。本文将介绍基于深度学习的航拍图像中地物变化检测的方法,并附上相应的代码实例。
直接操作 VGA 显存:用汇编控制文本显示
本文详解VGA文本模式下直接操作显存的原理与实践:通过段寄存器B800h访问显存,每字符占2字节(ASCII+属性),利用偏移公式(n×80+m)×2定位输出。属性字节控制颜色与闪烁,如1Ch为蓝底亮红字。使用MOV ES:[DI], AX结合REP STOSW可高效清屏,配合INT 10h实现光标重置与滚动窗口。深入理解显存映射,是掌握图形底层逻辑的关键。
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
3262



被折叠的 条评论
为什么被折叠?



