在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡(jiǎn)單了解反調(diào)試技術(shù)

蛇矛實(shí)驗(yàn)室 ? 來(lái)源:蛇矛實(shí)驗(yàn)室 ? 2023-11-13 11:10 ? 次閱讀

本期作者/牛杰

前言

反調(diào)試技術(shù),是一種防止逆向的方案。逆向人員如果遇到復(fù)雜的代碼混淆,有時(shí)會(huì)使用調(diào)試器動(dòng)態(tài)分析代碼邏輯簡(jiǎn)化分析流程。例如惡意軟件通常會(huì)被安全研究人員、反病毒廠商和其他安全專業(yè)人員分析和調(diào)試,以了解其行為和功能,并開發(fā)相應(yīng)的安全措施來(lái)保護(hù)系統(tǒng),這時(shí),惡意軟件開發(fā)人員就會(huì)使用反調(diào)試技術(shù)阻礙逆向人員的分析,以達(dá)到增加自己惡意代碼的存活時(shí)間。此外,安全人員也需要了解反調(diào)試技術(shù),當(dāng)遇到反調(diào)試代碼時(shí),可以使用相對(duì)應(yīng)的反反調(diào)試。

反調(diào)試

1. IsDebuggerPresent

IsDebuggerPresent 用于檢測(cè)當(dāng)前進(jìn)程是否正在被調(diào)試。該函數(shù)屬于 Windows 調(diào)試輔助功能,可以幫助開發(fā)人員在程序運(yùn)行過(guò)程中進(jìn)行調(diào)試。

IsDebuggerPresent 函數(shù)的原型如下:

BOOL IsDebuggerPresent(void);

該函數(shù)返回一個(gè)布爾值,如果當(dāng)前進(jìn)程正在被調(diào)試,則返回 TRUE;否則返回 FALSE。

檢查進(jìn)程環(huán)境塊(PEB)中是否設(shè)置了正在調(diào)試的標(biāo)志。

這實(shí)際上與IsDebuggerPresent()內(nèi)部執(zhí)行的代碼相同。

x86的PEB指針從DWORD FS:[0x30]中獲取,x64在QWORD GS:[0x60]中獲取。

IsDebuggerPresent 函數(shù)只能檢測(cè)當(dāng)前進(jìn)程是否正在被調(diào)試,而不能檢測(cè)其他進(jìn)程的調(diào)試狀態(tài)。此外,安全研究人員和反病毒廠商可以使用各種技術(shù)和工具來(lái)繞過(guò) IsDebuggerPresent 函數(shù)的檢測(cè),因此它并不是一個(gè)絕對(duì)可靠的方法來(lái)判斷系統(tǒng)是否正在進(jìn)行調(diào)試。

2. CheckRemoteDebuggerPresent

CheckRemoteDebuggerPresent 用于檢測(cè)當(dāng)前進(jìn)程是否被遠(yuǎn)程調(diào)試器附加。該函數(shù)可以檢測(cè)當(dāng)前進(jìn)程是否正在被遠(yuǎn)程調(diào)試器(如遠(yuǎn)程調(diào)試器工具或調(diào)試代理程序)監(jiān)視和調(diào)試,惡意軟件可以使用該函數(shù)來(lái)判斷自身是否處于被遠(yuǎn)程調(diào)試的環(huán)境中,并根據(jù)檢測(cè)結(jié)果采取相應(yīng)的措施,如崩潰、隱藏關(guān)鍵代碼等,以防止被分析和調(diào)試。

CheckRemoteDebuggerPresent 函數(shù)的原型如下:

BOOL CheckRemoteDebuggerPresent(
HANDLE hProcess,
PBOOL pbDebuggerPresent
);

該函數(shù)接受兩個(gè)參數(shù):

hProcess:要檢查的進(jìn)程的句柄。通常使用 GetCurrentProcess() 函數(shù)獲取當(dāng)前進(jìn)程的句柄。

pbDebuggerPresent:一個(gè)指向 BOOL 類型的變量的指針,用于接收檢測(cè)結(jié)果。如果檢測(cè)到遠(yuǎn)程調(diào)試器附加,則該變量被設(shè)置為 TRUE;否則設(shè)置為 FALSE。

3. 斷點(diǎn)檢測(cè)

斷點(diǎn)是一種調(diào)試技術(shù),用于在特定的內(nèi)存地址上設(shè)置斷點(diǎn),以便在程序執(zhí)行到該地址時(shí)觸發(fā)中斷,因此可以通過(guò)判斷斷點(diǎn)的存在與否來(lái)確認(rèn)程序是否被調(diào)試,斷點(diǎn)分為硬件斷點(diǎn)與軟件斷點(diǎn),檢測(cè)的方式不同。

硬件斷點(diǎn)檢測(cè)

x86架構(gòu),DR0到DR3寄存器用于設(shè)置硬件斷點(diǎn)的地址,DR4和DR5寄存器在x86架構(gòu)中沒(méi)有特定的用途,DR6寄存器是一個(gè)狀態(tài)寄存器,用于指示硬件斷點(diǎn)的觸發(fā)情況。因此我們需要判斷DR0-DR3的值,如果有值不為0,則處于調(diào)試狀態(tài),x64架構(gòu)引入了新的調(diào)試寄存器,稱為DR7寄存器,用于控制硬件斷點(diǎn)和其他調(diào)試功能,但是判斷是否被調(diào)試的方式與x86架構(gòu)相同。獲取值的代碼如下:

BOOL HardwareBreakpoints()
{
BOOL bResult = FALSE;
PCONTEXT ctx = PCONTEXT(VirtualAlloc(NULL, sizeof(CONTEXT), MEM_COMMIT, PAGE_READWRITE));

if(ctx) {

SecureZeroMemory(ctx, sizeof(CONTEXT));
ctx->ContextFlags = CONTEXT_DEBUG_REGISTERS;
if(GetThreadContext(GetCurrentThread(), ctx)) {
if(ctx->Dr0 != 0|| ctx->Dr1 != 0|| ctx->Dr2 != 0|| ctx->Dr3 != 0)
bResult = TRUE;
}

VirtualFree(ctx, 0, MEM_RELEASE);
}

returnbResult;
}

軟件斷點(diǎn)檢測(cè)

軟件斷點(diǎn)又稱int3,在IA-32指令集中用操作碼CC (0xCC)表示,因此有時(shí)軟件點(diǎn)的檢測(cè)也稱為"0xCC"檢測(cè),調(diào)試器在對(duì)應(yīng)設(shè)置斷點(diǎn)的位置上修改該地址的字節(jié)為0xCC。若是關(guān)鍵位置檢測(cè)到該指令,可以判斷進(jìn)程處于調(diào)試狀態(tài)。

4. PEB

在Windows操作系統(tǒng)中,PEB(Process Environment Block)是一個(gè)數(shù)據(jù)結(jié)構(gòu),它存儲(chǔ)了進(jìn)程的環(huán)境信息和狀態(tài)。每個(gè)運(yùn)行的進(jìn)程都有一個(gè)獨(dú)立的PEB。

1. BeingDebugged

與IsDebuggerPresent()內(nèi)部執(zhí)行的代碼相同,獲取方式如下:

//x86
PPEB pPeb = (PPEB)__readfsdword(0x30);
//x64
PPEB pPeb = (PPEB)__readgsqword(0x60);

2. NtGlobalFlag

NtGlobalFlag 是PEB的一個(gè)字段,通常,當(dāng)進(jìn)程未被調(diào)試時(shí),NtGlobalFlag字段包含值0x0。調(diào)試進(jìn)程時(shí),該字段通常包含值0x70。

該字段在x86越x64架構(gòu)中的位置不同。

x86在PEB偏移0x68的位置,x64在PEB便0xBC的位置。

Windows內(nèi)核全局標(biāo)記,在Windows調(diào)試方案中經(jīng)常用到。這個(gè)標(biāo)記定義了一組系統(tǒng)的調(diào)試參數(shù),包括啟用或禁用調(diào)試技術(shù)的開關(guān)、造成崩潰的錯(cuò)誤代碼和處理方式等等。通過(guò)改變這個(gè)標(biāo)記,可以在運(yùn)行時(shí)設(shè)置和禁用不同的調(diào)試技術(shù)和錯(cuò)誤處理方式,比如調(diào)試器只能訪問(wèn)當(dāng)前進(jìn)程、只允許用戶模式調(diào)試、啟用特定的錯(cuò)誤處理方式等等。但由于NtGlobalFlag標(biāo)記是內(nèi)核全局標(biāo)記,其改變會(huì)影響整個(gè)系統(tǒng)的行為,需要謹(jǐn)慎處理。

5.ProcessHeap

通過(guò)PEB偏移0x18可以找到ProcessHeap,結(jié)構(gòu)體如下:

struct _PEB32
{
UCHAR InheritedAddressSpace; //0x0
UCHAR ReadImageFileExecOptions; //0x1
UCHAR BeingDebugged; //0x2
union
{
UCHAR BitField; //0x3
struct
{
UCHAR ImageUsesLargePages:1; //0x3
UCHAR IsProtectedProcess:1; //0x3
UCHAR IsImageDynamicallyRelocated:1; //0x3
UCHAR SkipPatchingUser32Forwarders:1; //0x3
UCHAR IsPackagedProcess:1; //0x3
UCHAR IsAppContainer:1; //0x3
UCHAR IsProtectedProcessLight:1; //0x3
UCHAR IsLongPathAwareProcess:1; //0x3
};
};
ULONG Mutant; //0x4
ULONG ImageBaseAddress; //0x8
ULONG Ldr; //0xc
ULONG ProcessParameters; //0x10
ULONG SubSystemData; //0x14
ULONG ProcessHeap; //0x18
....
}

在ProcessHeap加上偏移可以找到HeapFlags與ForceFlags,偏移的值根據(jù)系統(tǒng)版本和位數(shù)會(huì)有變化,如下表:

HeapFlags

2baedfc0-7fb1-11ee-939d-92fbcf53809c.png

ForceFlags

2bd16c20-7fb1-11ee-939d-92fbcf53809c.png

如果HeapFlags的值大于2,或ForceFlags的值大于0時(shí),說(shuō)明被調(diào)試。

6. INT 2D

int 2d反調(diào)試原理很簡(jiǎn)單,正常運(yùn)行時(shí)int 2d觸發(fā)異常,進(jìn)入程序的異常處理函數(shù)。而當(dāng)調(diào)試運(yùn)行時(shí),OD會(huì)處理該異常,將eip+1繼續(xù)運(yùn)行,因此可以在異常處理函數(shù)中添加一些操作,如果沒(méi)有執(zhí)行這些代碼,說(shuō)明被調(diào)試。這種只能檢測(cè)原版Ollydbg,x64dbg和一些帶有反檢測(cè)插件的調(diào)試器無(wú)效。

7. 進(jìn)程列表

一般情況下,主進(jìn)程在主線程中啟動(dòng)核心代碼

QueryInformationJobObject這個(gè)api可以獲取當(dāng)前程序所有的進(jìn)程列表

不論是主進(jìn)程還是主線程,他們的ImageFileName應(yīng)該是都是源程序的文件名filename.exe

8. NtQueryInformationProcess

NtQueryInformationProcess原型如下:

NTSTATUS NTAPI NtQueryInformationProcess(
HANDLE ProcessHandle,// 進(jìn)程句柄
PROCESSINFOCLASS ProcessInformationClass,// 檢索的進(jìn)程信息類型
PVOID ProcessInformation,// 接收進(jìn)程信息的緩沖區(qū)指針
ULONG ProcessInformationLength,// 緩沖區(qū)指針大小
PULONG ReturnLength // 實(shí)際接收的進(jìn)程信息大小
);

PROCESSINFOCLASS原型如下:

typedefenum_PROCESSINFOCLASS
{
ProcessBasicInformation, 
ProcessQuotaLimits, 
ProcessIoCounters, 
ProcessVmCounters, 
ProcessTimes, 
ProcessBasePriority, 
ProcessRaisePriority,
ProcessDebugPort, //0x7 
ProcessExceptionPort, 
ProcessAccessToken, 
ProcessLdtInformation, 
ProcessLdtSize, 
ProcessDefaultHardErrorMode, 
ProcessIoPortHandlers, 
ProcessPooledUsageAndLimits, 
ProcessWorkingSetWatch,
ProcessUserModeIOPL,
ProcessEnableAlignmentFaultFixup, 
ProcessPriorityClass, 
ProcessWx86Information,
ProcessHandleCount, 
ProcessAffinityMask, 
ProcessPriorityBoost, 
ProcessDeviceMap, 
ProcessSessionInformation, 
ProcessForegroundInformation,
ProcessWow64Information, 
ProcessImageFileName, 
ProcessLUIDDeviceMapsEnabled, 
ProcessBreakOnTermination, 
ProcessDebugObjectHandle, // 0x1E
ProcessDebugFlags, // 0x1F
ProcessHandleTracing, 
ProcessIoPriority, 
ProcessExecuteFlags, 
ProcessResourceManagement, 
ProcessCookie, 
ProcessImageInformation, 
ProcessCycleTime, 
ProcessPagePriority, 
ProcessInstrumentationCallback, 
ProcessThreadStackAllocation, 
ProcessWorkingSetWatchEx,
ProcessImageFileNameWin32, 
ProcessImageFileMapping, 
ProcessAffinityUpdateMode, 
ProcessMemoryAllocationMode, 
ProcessGroupInformation,
ProcessTokenVirtualizationEnabled, 
ProcessConsoleHostProcess, 
ProcessWindowInformation, 
ProcessHandleInformation,
ProcessMitigationPolicy,
ProcessDynamicFunctionTableInformation,
ProcessHandleCheckingMode,
ProcessKeepAliveCount,
ProcessRevokeFileHandles,
ProcessWorkingSetControl,
ProcessHandleTable, 
ProcessCheckStackExtentsMode,
ProcessCommandLineInformation,
ProcessProtectionInformation,
ProcessMemoryExhaustion,
ProcessFaultInformation, 
ProcessTelemetryIdInformation, 
ProcessCommitReleaseInformation, 
ProcessDefaultCpuSetsInformation,
ProcessAllowedCpuSetsInformation,
ProcessSubsystemProcess,
ProcessJobMemoryInformation, 
ProcessInPrivate, 
ProcessRaiseUMExceptionOnInvalidHandleClose, 
ProcessIumChallengeResponse,
ProcessChildProcessInformation, 
ProcessHighGraphicsPriorityInformation,
ProcessSubsystemInformation, 
ProcessEnergyValues, 
ProcessActivityThrottleState, 
ProcessActivityThrottlePolicy,
ProcessWin32kSyscallFilterInformation,
ProcessDisableSystemAllowedCpuSets, 
ProcessWakeInformation,
ProcessEnergyTrackingState,
ProcessManageWritesToExecutableMemory,REDSTONE3
ProcessCaptureTrustletLiveDump,
ProcessTelemetryCoverage,
ProcessEnclaveInformation,
ProcessEnableReadWriteVmLogging, 
ProcessUptimeInformation,
ProcessImageSection,
ProcessDebugAuthInformation, 
ProcessSystemResourceManagement,
ProcessSequenceNumber,
ProcessLoaderDetour,
ProcessSecurityDomainInformation, 
ProcessCombineSecurityDomainsInformation, 
ProcessEnableLogging, 
ProcessLeapSecondInformation,
ProcessFiberShadowStackAllocation,
ProcessFreeFiberShadowStackAllocation,
MaxProcessInfoClass
} PROCESSINFOCLASS;

1. ProcessDbgPort

該方式是CheckRemoteDebuggerPresent的另一種調(diào)用方式。

通過(guò)NTDLL導(dǎo)出NtQueryInformationProcess函數(shù),PROCESSINFOCLASS設(shè)置為7,該值是進(jìn)程調(diào)試端口(ProcessDebugPort),該值不為0說(shuō)明被調(diào)試。

2. ProcessDebugObjectHandle

通過(guò)NTDLL導(dǎo)出NtQueryInformationProcess函數(shù),PROCESSINFOCLASS設(shè)置為0x1E,該值是進(jìn)程的調(diào)試對(duì)象句柄(ProcessDebugObjectHandle),當(dāng)該值存在且函數(shù)返回值不為NULL,說(shuō)明進(jìn)程處于調(diào)試狀態(tài),當(dāng)返回值為NULL,或該值不存在,說(shuō)明處于非調(diào)試狀態(tài)。

3. ProcessDebugFlags

通過(guò)NTDLL導(dǎo)出NtQueryInformationProcess函數(shù),PROCESSINFOCLASS設(shè)置為0x1f,該值獲取了EPROCESS中的成員NoDebugInherit,該值為0說(shuō)明被調(diào)試。

9. WUDFPlatform.dll模塊

WUDFPlatform.dll模塊中,有三個(gè)導(dǎo)出函數(shù) WudfIsAnyDebuggerPresent,WudfIsKernelDebuggerPresent,WudfIsUserDebuggerPresent,分別為任何調(diào)試器、0環(huán)調(diào)試器和3環(huán)調(diào)試器,該模塊只有x64。

通過(guò)調(diào)用這三個(gè)函數(shù),如果返回值不為0,則正在被調(diào)試。

代碼如下:

HMODULE h_wudf = LoadLibrary(L"WUDFPlatform.dll");
if(h_wudf == NULL) {
cout << "fail"?<< endl;

????}

????// WudfIsAnyDebuggerPresent
????pWudfIsAnyDebuggerPresent WudfIsAnyDebuggerPresent = (pWudfIsAnyDebuggerPresent)GetProcAddress(h_wudf, "WudfIsAnyDebuggerPresent");
????if?(WudfIsAnyDebuggerPresent == NULL) {
????????cout << "未發(fā)現(xiàn)調(diào)試器"?<< endl;

????}
????if?(WudfIsAnyDebuggerPresent() != 0) {
????????cout << "發(fā)現(xiàn)調(diào)試器"?<< endl;
????}

????// WudfIsKernelDebuggerPresent
????pWudfIsKernelDebuggerPresent WudfIsKernelDebuggerPresent = (pWudfIsKernelDebuggerPresent)GetProcAddress(h_wudf, "WudfIsKernelDebuggerPresent");
????if?(WudfIsKernelDebuggerPresent == NULL) {
????????cout << "未發(fā)現(xiàn)3環(huán)調(diào)試器"" << endl;
????}
????if (WudfIsKernelDebuggerPresent() != 0) {
????????cout << "發(fā)現(xiàn)0環(huán)調(diào)試器" << endl;
????}

????// pWudfIsUserDebuggerPresent
????pWudfIsUserDebuggerPresent WudfIsUserDebuggerPresent = (pWudfIsUserDebuggerPresent)GetProcAddress(h_wudf, "WudfIsUserDebuggerPresent");
????if (WudfIsUserDebuggerPresent == NULL) {
????????cout << "未發(fā)現(xiàn)3環(huán)調(diào)試器" << endl;
????}
????if (WudfIsUserDebuggerPresent() != 0) {
????????cout << "發(fā)現(xiàn)3環(huán)調(diào)試器" << endl;

測(cè)試結(jié)果如下

2bee6bd6-7fb1-11ee-939d-92fbcf53809c.png

總結(jié)

本篇介紹了部分反調(diào)試的方法,在自己的代碼中使用反調(diào)試技術(shù),可以增加逆向人員的分析難度,或是通過(guò)了解這些技術(shù)的原理,在分析惡意代碼時(shí)進(jìn)行反反調(diào)試,在后續(xù)的文章中,將會(huì)介紹更多的反調(diào)試方法。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3608

    瀏覽量

    91028
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    608

    瀏覽量

    34546
  • 調(diào)試技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6706
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4891

    瀏覽量

    70312
  • 調(diào)試器
    +關(guān)注

    關(guān)注

    1

    文章

    312

    瀏覽量

    24198

原文標(biāo)題:反調(diào)試技術(shù)-上

文章出處:【微信號(hào):蛇矛實(shí)驗(yàn)室,微信公眾號(hào):蛇矛實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    介紹6種常見的反調(diào)試方法

    開發(fā)相應(yīng)的安全措施來(lái)保護(hù)系統(tǒng),這時(shí),惡意軟件開發(fā)人員就會(huì)使用反調(diào)試技術(shù)阻礙逆向人員的分析,以達(dá)到增加自己惡意代碼的存活時(shí)間。此外,安全人員也需要了解反調(diào)試
    的頭像 發(fā)表于 01-15 09:53 ?6532次閱讀
    介紹6種常見的<b class='flag-5'>反調(diào)試</b>方法

    動(dòng)態(tài)反調(diào)試技術(shù)總結(jié)

    ;windows.h"#include "tchar.h"void DynAD_RDTSC(){//Timing Check 技術(shù)通過(guò)計(jì)算運(yùn)行時(shí)間的差異來(lái)反調(diào)試,反模擬
    發(fā)表于 07-10 06:21

    shell編程的簡(jiǎn)單命令語(yǔ)句了解

    shell(腳本:批處理)適合職業(yè):Linux系統(tǒng)運(yùn)維工程師1.命令解析器(將用戶輸入的命令解析,調(diào)用相應(yīng)的命令的可執(zhí)行文件)2.腳本語(yǔ)言我們需要了解的是shell編程的簡(jiǎn)單命令語(yǔ)句一個(gè)簡(jiǎn)單的shell編程實(shí)現(xiàn)的程序:記錄100
    發(fā)表于 11-04 08:00

    學(xué)PLC技術(shù)簡(jiǎn)單

    學(xué)PLC技術(shù)簡(jiǎn)單 作者:蔡杏山 主編 出版時(shí)間:2013 《學(xué)技能超簡(jiǎn)單:學(xué)PLC技術(shù)簡(jiǎn)單》是一本介紹PLC
    發(fā)表于 11-05 10:52 ?0次下載

    labview怎么調(diào)試?基于labview的USB調(diào)試教程案例分析

    labview怎么調(diào)試是我們?cè)谑褂肗I LabVIEW軟件時(shí)候經(jīng)常會(huì)碰到的問(wèn)題,當(dāng)軟件不能按照預(yù)期的情況運(yùn)行時(shí),我們可能會(huì)需要有一個(gè)自己的調(diào)試技巧和技術(shù)工具箱。這里給大家分享一個(gè)為了查看收發(fā)數(shù)據(jù)而編寫的基于labview的USB
    發(fā)表于 01-16 09:40 ?1.4w次閱讀

    STM32調(diào)試DEBUG時(shí)需要了解那些知識(shí)相關(guān)資料概述

    學(xué)習(xí)STM32開發(fā),肯定少不了DEBUG調(diào)試這一步驟。那么,本文帶你了解一下這個(gè)調(diào)試相關(guān)的知識(shí)。本文以STM
    的頭像 發(fā)表于 11-11 11:39 ?7290次閱讀
    STM32<b class='flag-5'>調(diào)試</b>DEBUG時(shí)需要<b class='flag-5'>了解</b>那些知識(shí)相關(guān)資料概述

    如何使用Xilinx SDK創(chuàng)建Linux應(yīng)用程序,并進(jìn)行開發(fā)和調(diào)試

    了解如何使用Xilinx SDK創(chuàng)建Linux應(yīng)用程序。 我們還將重點(diǎn)介紹和演示支持Linux應(yīng)用程序開發(fā)和調(diào)試的不同方面的SDK功能。 整個(gè)過(guò)程快速而簡(jiǎn)單
    的頭像 發(fā)表于 11-20 07:03 ?1.1w次閱讀

    本田唱反調(diào),混動(dòng)車型仍然是重點(diǎn)

    在豐田、大眾、寶馬、戴姆勒、福特等諸多車企紛紛投入電動(dòng)化戰(zhàn)略時(shí),本田卻唱了“反調(diào)”。據(jù)外媒報(bào)道,本田汽車CEO八鄉(xiāng)隆弘近日在接受采訪時(shí)表示,“不相信電動(dòng)汽車會(huì)很快成為主流”,因?yàn)閯?dòng)力電池和充電設(shè)施還有限制。本田汽車的目標(biāo)是減少碳排放,混動(dòng)系統(tǒng)仍是目前本田重點(diǎn)的發(fā)展方向。
    的頭像 發(fā)表于 11-18 17:02 ?3222次閱讀

    下載調(diào)試接口SWD和JTAG的區(qū)別

    作為嵌入式工程師,下載調(diào)試器都應(yīng)該知道,但你真正了解其 SWD 和 JTAG 接口的含義和區(qū)別嗎? 1、什么是下載調(diào)試簡(jiǎn)單來(lái)說(shuō),下載調(diào)試
    的頭像 發(fā)表于 11-28 11:44 ?5078次閱讀

    RISC-V的調(diào)試標(biāo)準(zhǔn)及跟蹤技術(shù)

    本文主要詳細(xì)介紹了RISC-V的調(diào)試標(biāo)準(zhǔn)以及RISC-V的跟蹤技術(shù),感興趣的小伙伴跟小編一起了解一下吧。
    的頭像 發(fā)表于 06-23 17:19 ?3204次閱讀
    RISC-V的<b class='flag-5'>調(diào)試</b>標(biāo)準(zhǔn)及跟蹤<b class='flag-5'>技術(shù)</b>

    220kv電力變壓器正反調(diào)和粗細(xì)調(diào)沖擊電壓分析

    220kv電力變壓器正反調(diào)和粗細(xì)調(diào)沖擊電壓分析(通信電源技術(shù)期刊是什么級(jí)別)-220kv電力變壓器正反調(diào)和粗細(xì)調(diào)沖擊電壓分析? ? ? ? ? ? ?
    發(fā)表于 09-24 09:20 ?1次下載
    220kv電力變壓器正<b class='flag-5'>反調(diào)</b>和粗細(xì)調(diào)沖擊電壓分析

    基于OpenOCD和GDB的簡(jiǎn)單且廉價(jià)的步進(jìn)調(diào)試

    電子發(fā)燒友網(wǎng)站提供《基于OpenOCD和GDB的簡(jiǎn)單且廉價(jià)的步進(jìn)調(diào)試器.zip》資料免費(fèi)下載
    發(fā)表于 08-02 09:47 ?0次下載
    基于OpenOCD和GDB的<b class='flag-5'>簡(jiǎn)單</b>且廉價(jià)的步進(jìn)<b class='flag-5'>調(diào)試</b>器

    了解 1-Wire 的簡(jiǎn)單

    做得更好:了解 1-Wire 的簡(jiǎn)單
    的頭像 發(fā)表于 12-29 10:02 ?1394次閱讀
    <b class='flag-5'>了解</b> 1-Wire 的<b class='flag-5'>簡(jiǎn)單</b>性

    FPGA在線調(diào)試的方法簡(jiǎn)單總結(jié)

    Xilinx被AMD收購(gòu)的事情把我震出來(lái)了,看了看上上一篇文章講了下仿真的文件操作,這篇隔了很久遠(yuǎn),不知道該從何講起,就說(shuō)說(shuō)FPGA的在線調(diào)試的一些簡(jiǎn)單的操作方法總結(jié)。
    發(fā)表于 06-19 15:52 ?2348次閱讀
    FPGA在線<b class='flag-5'>調(diào)試</b>的方法<b class='flag-5'>簡(jiǎn)單</b>總結(jié)

    簡(jiǎn)單了解SDK與APK的區(qū)別

    不少小伙伴在開發(fā)軟件中會(huì)提到兩個(gè)詞:API和SDK。雖然它們看起來(lái)很專業(yè),但其實(shí)背后的概念并不復(fù)雜。這篇文章能簡(jiǎn)單的幫你了解SDK與APK的區(qū)別。
    的頭像 發(fā)表于 10-11 10:08 ?3033次閱讀
    主站蜘蛛池模板: 中文字幕二区 | 日本成片免费高清 | 久久久久无码国产精品一区 | 日日摸夜夜爽夜夜爽出水 | 天堂中文在线资源库用 | 男啪女色黄无遮挡免费观看 | 色狠狠综合网 | 日本xxxxbbbb| 高清一区二区在线观看 | 三级毛片在线免费观看 | 黄页网址免费观看18网站 | 99热久久精品最新 | 521色香蕉网在线观看免费 | 亚洲一区二区视频在线观看 | 人与牲动交xxxxbbbb高清 | 视频在线一区二区 | 曰韩欧美 | 国产h视频在线 | 成人欧美一区二区三区黑人免费 | 在线观看你懂的视频 | 欧美亚洲综合另类成人 | 国产裸露片段精华合集链接 | 我不卡午夜| 国产精品三级a三级三级午夜 | 久久天天躁狠狠躁夜夜不卡 | 久久精品国产福利国产琪琪 | 一本到午夜92版免费福利 | 91av在线免费观看 | sihu永久在线播放地址 | 黑人边吃奶边扎下面激情视频 | 奇米影视一区 | 久久久免费视频播放 | 天天色成人 | 欧美一级看片免费观看视频在线 | 男女免费视频 | 精品三级在线 | 性欧美高清强烈性视频 | 最近2018中文字幕2019高清 | 看全色黄大色大片免费久久 | 4438全国最大成人免费高清 | 九色视频网 |