精华内容
下载资源
问答
  • python开发调试器——起始篇 首先,你得准备一套python开发环境,正常情况下,一般是在windows下开发的,因为win系统应用广泛,再则就是要个IDE,这里我选择我熟悉的Eclipse。环境搭建,网上都...

    首先,你得准备一套python开发环境,正常情况下,一般是在windows下开发的,因为win系统应用广泛,再则就是要有个IDE,这里我选择我熟悉的Eclipse。环境搭建,网上都有,比如:http://www.jb51.net/article/34517.htm

    环境搭好后,再来说一下什么是调试器。

    一般用python写黑客脚本,都会用到一个神库:ctype。兼具C语言的底层操作能力,同时具备动态语言的方便性,这种情况在编程语言里不多见吧?!ctype模块能使你轻而易举的调用动态链接库中的导出函数,更美妙的是你还可以通过ctype构建复杂的C数据类型,从而编写出具有底层内存操作功能的工具函数。

    那么,什么是动态链接库呢?

    动态链接库不过只是一些经过编译过的二进制文件,只有在运行时才会被链接到主进程。在win平台下这些二进制文件被称为DLL,而linux下这些文件是被叫做共享对象(SO)的。无论哪一种平台,这些二进制文件都是通过导出函数名称的方式来呈现它们所包含的函数。这些由链接库导出的函数名称可以被解析成为内存中实际的函数地址。

    好了,切入正题,本章主要解释调试器。

    调试器被称为“黑客之瞳”,望文生义,当然是好比人的眼睛。调试器能够跟踪一个进程的运行时状态,这种技术叫动态分析技术。动态分析技术在某些场合下必不可少。比如:开发基于安全漏洞实施攻击的exploit程序,或者作为fuzzing测试框架进行漏洞挖掘时的辅助工具,以及恶意软件分析等等。调试器为软件缺陷审计提供了一组极为有用的特性和功能。大多数调试器都具备的功能:运行、暂停和单步执行,除此外还包括:设置断点、修改寄存器与内存数据值,以及捕获发生在目标进程中的异常事件。

    说了这么多,调试器对我们黑客来说到底有什么用,初看上面,貌似就是我们eclipse里面的调试器一样。(这个确实是这样,每个IDE都自带了调试器了)

    我们先举个软件测试的例子,常说的白盒测试和黑盒测试。

    绝大多数开发平台及IDE都自带一个内建调试器,用于帮助开发人员对他们的程序进行源码级别的跟踪和调试,这种源码级别的调试方式能够使用户对被调试的进程获取比较高级别的控制能力。这种调试器我们成为白盒调试器。然后不幸的是,对于逆向工程师以及漏洞挖掘人员来说,能够直接获取源代码的情况很少发生,因此必须利用黑盒调试器来对目标程序进行跟踪。黑盒调试器是基于一个假设,需要被分析的目标软件对于黑客来说是一个完全不透明的黑盒,黑客唯一获取信息的来源就是那些以汇编代码形式出现的反汇编结果。那些最终攻破软件体系的家伙应该要比软件开发者本人对系统具有更深层次的理解。

    黑盒调试器分为两种:用户态调试器和内核调试器。用户态(通常被叫做ring3)是指CPU处理器在执行应用程序代码时所处的一种特定状态,用户态下的应用程序是以最低权限运行的。例如,当你试图启动calc.exe进行一些数学计算时,实际上所做的是生成一个用户态进程,并与之进行交互。如果你想跟踪这个进程,你需要一个用户态调试器。内核态(ring0)则代表了最高级别的权限,操作系统的内核代码,连同驱动程序等这一类底层组件正是在内核态下运行。当你使用Wireshark嗅探网络封包时,你实际上正在和一个工作在内核态下的网卡驱动程序进行交互。同上,如果想跟踪,那么就要借助一个内核态的调试器。

    这里给出几个有名气的用户态调试器:微软推出的WinDbg和由Oleh Yuschuk开发并免费发布的OllyDbg。当你在linux下调试时,倾向于使用标准的GNU调试器(gdb)。

     

    介绍了这么多,那么调试器的原理是什么呢?

    首先我们需要了解CPU的体系结构。

    1、通用寄存器

    寄存器的作用想必学过计算机的人都知道。在X86指令集中,一个CPU具有8个通用寄存器:EAX、EDX、ECX、ESI、EDI、EBP、ESP、和EBX。这8个通用寄存器中的每一个都被安排了特定用途,因为CPU在执行某些特定指令时需要特定的寄存器协作以高效地完成其指令执行过程。那么下面来介绍下:

    EAX  也被称为累加器,用于协助执行一些常见的运算操作以及用于传递函数调用的返回值。在X86指令集中很多经过优化的指令会优先将数据写入或读出EAX寄存器,再对数据进行进一步运算。大多数基本基本的运算操作:加法、减法和比较都会借助使用EAX寄存器来达到指令优化的效果。还有一些特殊的指令,如:乘法和除法则必须在EAX寄存器中进行。

    有一点必须牢记,函数调用的返回值将被存储在EAX寄存器。这样,你可以通过存储在EAX中的值来判断一个函数调用所执行的操作时成功还是失败了。

    EDX   是一个数据寄存器。这个寄存器可以被看成EAX寄存器的延伸部分,用于协助一些更为复杂的运算指令,如:乘法和除法,EDX被用于存储这些指令操作的额外数据结果。

    ECX   也被称为计数器,用于支持循环操作。存储一个字符串或者进行计数就是典型的循环操作。需要注意的是ECX寄存器通常是反向计数,而不是正向计数。我们用Python代码来验证这个问题“

    coun = 0
    while coun < 10:
            print  "Loop number : %d"  % coun
            coun +=1

    如果你将这段代码的逻辑用汇编语言来表示,那么在代码执行到第一次循环时ECX中的值会为10,当代码执行到第二次循环时,ECX中的值会递减到9,依此类推。

    在X86汇编中,涉及到数据处理的循环操作依赖于ESI和EDI这两个寄存器,以实现高效的数据操作。ESI被称为源变址寄存器,这个寄存器存储着输入数据流的位置信息。EDI寄存器则指向相关数据操作结果的存放的位置,我们称为目的变址寄存器。可以简单理解为ESI用于读,EDI用于写。

    ESP和EBP这两个寄存器分别被称为栈指正和基址指针。这些寄存器用于控制函数调用和相关栈操作。当一个函数被调用时,调用参数连同函数的返回地址将先后被压入函数栈中。ESP寄存器始终指向函数栈的顶端,由此得出在调用函数过程中的某一时刻,ESP指向了函数的返回地址。EBP寄存器始终指向函数栈的底端。

    EBX寄存器是唯一一个没有指定特殊用途的寄存器。可以被作为额外的存储单元来使用。

    另外一个EIP寄存器,这个寄存器始终指向当前正在执行的指令。当CPU穿行于二进制代码中,EIP中的值随之更新以实时反映当前代码所执行到的位置。

    说了这么多寄存器,无非是想说明,调试器应当达到的目标之一:调试器应当能够轻易地读取和修改这些寄存器的内容。每个操作系统都会提供一组接口使得调试器能够与CPU进行交互,以获取或修改这些寄存器中的值。

     

     

     

     

    posted on 2013-12-19 12:43 代码一刀 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/zengdan-develpoer/p/3481955.html

    展开全文
  • GDB 是GNU工程为GNU操作系统开发的调试器,但它的使用不局限于GNU操作系统, GDB可以运行在UNIX、Linux甚至Microsoft Windows。 GDB可以调试C、C++、Objective-C、Pascal、Ada等语言编写的程序;被调试的程序可以跟...

    GDB调试器及简单的调试方法

    前言

    学习GDB之前我们要了解一下什么是GDB,学习GDB对我们程序的调试有什么作用。
    GDB 是GNU工程为GNU操作系统开发的调试器,但它的使用不局限于GNU操作系统, GDB可以运行在UNIX、Linux甚至Microsoft Windows。
    GDB可以调试C、C++、Objective-C、Pascal、Ada等语言编写的程序;被调试的程序可以跟GDB运行于同一台电脑,也可运行与不同的电脑用
    GDB我们可以
    设置断点使程序停住
    监视或修改程序中变量的值
    跟踪代码执行过程

    1、GDB的使用

    程序要能被调试,必须包含调试信息,因此在编译程序是需要为程序添加调试信息
    如:gcc -g -o hello hello.c
    编译之后便可以用GDB对程序进行调试。

    2、简单程序调试

    使用下面的代码实现对一个整型数的反转功能,但是输入100时结果出错,找到问题。

    #include<stdio.h>
    void x(int a)
    {
    while (a>10)
    {
    printf("%d",a%10);
    a=a/10;
    }
    printf("%d\n",a);
    }
    int main(void)
    {
    int a;
    printf("input a number:\n");
    scanf("%d",&a);
    printf("After rever:\n");
    x(a);
    }
    

    (1)由于这是一个简单的程序,我们很容易就可以看出来错误之处在哪里,但是如果我们用GDB来进行调试找到错误之处的话,那么在编译生成可执行程序时,我们需要采用上面的编译方法。
    在这里插入图片描述
    (2)对生成的可执行程序 rever 进行调试

    # gdb rever
    

    在这里插入图片描述
    之后就可以使用gdb的各种参数,对程序进行简单的调试,从而找到错误之处。

    3、简单命令示

    1. gdb l 显示代码及行号
      在这里插入图片描述

    2. gdb b 行号 通过行号设置断点
      gdb 函数名 通过函数名设置断点
      gdb info b 显示所有断点信息
      在这里插入图片描述

    3. gdb run 执行程序
      gdb c 继续执行
      在这里插入图片描述
      由于之前在程序中以函数x进行了断点,并且在第6行设置断点,因此当程序执行到函数x或者执行到第6行时就会停止,此时输入命令c程序便会继续进行知道有结果。

    4. gdb c 继续执行
      gdb p a 打印a的值
      gdb s 单步执行
      gdb d 断点 删除这个断点
      gdb q 退出gdb

    3、core文件

    Linux中,程序崩溃时,一般会产生core文件记录进程退出前的状态,调试段错误问题,借助于该文件,可快速定位问题。
    可按如下步骤生成和使用core文件

    – Step 1: 让系统产生core文件
    • ulimit –c num #设定core文件容量(num为数字,为0是不产生core文件)
    – Step 2: 运行程序,让程序崩溃,从而生成core文件
    – Step 3: gdb配合core文件,定位问题
    • gdb 程序名 core文件名 • 比如: gdb segDemo co

    总结

    gdb可以很好的帮我们对自己的代码进行简单的调试,当代码量很大时,我们肯定不能一条一条的去看自己的代码,此时gdb就可以我们快速的找到错误之处。熟练的掌握gdb一些命令的用法可以让我们事半功倍。

    展开全文
  • Windbg-分析Windows蓝屏原因利器[转]下载地址先声明下,虽然windbg诊断蓝屏之前网络上已经人发过教程了,但就我而言, 学会使用windbg来诊断蓝屏也算是自己的原创吧。以前看一个微软专家的视频(微软专家张银奎...

    Windbg-分析Windows蓝屏原因利器[转]
    下载地址
    先声明下,虽然用windbg诊断蓝屏之前网络上已经有人发过教程了,但就我而言, 学会使用windbg来诊断蓝屏也算是自己的原创吧。以前看一个微软专家的视频(微软专家张银奎老师的《如何诊断和调试蓝屏错误》),专家提到可以用 windbg来调试dump文件,当时我就想能不能只关注是什么文件导致的系统崩溃,然后对症下药。后来通过一系列的实验,自己摸索出了用windbg诊 断蓝屏的方法,成功解决了包括KIS7.0插件、QQ插件、迅雷插件导致的蓝屏。废话就不多说了,本文没什么高深的技术,只是一些简单的操作,但应该可以 让身陷蓝屏困扰中的朋友带来些变化,起码能让你知道是谁在捣乱! 
      
       直观地说,蓝屏是系统崩溃。操作系统在遇到致命错误导致崩溃时,并不是直接挂掉,而是会记录下当时内存中的数据,将其存储成为dump文件,并用一串蓝屏代码向用户做出提示。 
      
       好了,大家跟我一起设置吧。 
      
       第一步,打开电脑的dump文件存储功能。在“我的电脑”上右键——属性——高级   

    Windows蓝屏dump文件查看器 - 香皂 - 香皂

     

    Windows蓝屏dump文件查看器 - 香皂 - 香皂



       选好后点确定,下次再出现蓝屏时,系统就会存储下dump文件,一般存放位置在系统盘的minidump文件夹下。(建议在该文件夹上点右键——属性——发送到——桌面快捷方式,以后就能在桌面上找到该文件夹了) 

    第二步,下载安装windbg 
    http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx#a 
    这个过程就不说了,随便选一个下载,安装时,一路“下一步”就行了。

    第三步,使用windbg诊断蓝屏错误 
       上面两步设好后,就想办法开始“制造”蓝屏吧,平时怎么用会出现蓝屏就拼命用直到出现蓝屏,嘿嘿。 
      
       蓝屏后重启,在minidump文件夹下会出现一个以日期为文件名的东东,那就是我们要的了。接下来打开windbg,点屏幕左下的 “开始”,如下图:

    Windows蓝屏dump文件查看器 - 香皂 - 香皂



    软件启动点File——Open Crash Dump,如图: 

    Windows蓝屏dump文件查看器 - 香皂 - 香皂



    然后找到你的minidump文件夹,dump文件一般是"时间.dmp"如图:

    Windows蓝屏dump文件查看器 - 香皂 - 香皂



    打开后就会自动分析了。分析完后,看最下面,找到3.probably caused by这一行,如图: 

    看,出来了吧那个myfault.sys文件就是罪魁祸首。 

    再补充点东西,

    导入dump文件分析完毕后,不要关闭,在后面输入 !analyze -v ,这个命令可以查看dump文件的详细情况,如图:

    Windows蓝屏dump文件查看器 - 香皂 - 香皂



    对普通用户有用的还有下面一些信息:


    第一行 DEFAULT_BUCKET_ID: 错误类型,这个懂点编程和操作系统知识的朋友用得上点
    第 三行 PROCESS_NAME: XXX.exe 这个是导致错误的进程,查出是什么文件导致的蓝屏后,再看这里就知道是谁调用了错误文件,比如你查出123.sys导致蓝屏,但你查不到123.sys是 哪个程序调用的,就可以用这个方法来看看,比如查出了是456.exe,你就可以在机子上或者网上搜索相关信息了。


    好了,到这里 相信大家已经学会怎么找到导致系统蓝屏的文件了,接下来怎么办呢?上网查资料,把导致蓝屏的那个文件名在网上搜索,基本就知道是什么文件了,一般网上也有 相关的解决办法,看看要删除些什么插件、打什么补丁或者重装软件等等。导致问题的不一定是.sys文件也有可能是.dll,这篇文章只能帮你找出导致蓝屏 的元凶,具体的解决办法得上网查。如果是查不到什么信息的.sys或者.dll就要当心了,有可能是病毒或者rootkit

    附:
    windbg基本调试命令:
    r 可以显示系统崩溃时的寄存器,和最后的命令状态。
    dd 显示当前内存地址,dd 参数:显示参数处的内存。
    u 可以显示反汇编的指令
    !analyze -v 显示分析的详细信息。
    kb 显示call stack 内容
    .bugcheck 可以显示出错的代码

    windbg诊断蓝屏的一点补充

    导入dump文件分析完毕后,不要关闭,在后面输入!analyze -v,这个命令可以查看dump文件的详细情况,如图:

    Windows蓝屏dump文件查看器 - 香皂 - 香皂




    对普通用户有用的还有下面一些信息:

    Windows蓝屏dump文件查看器 - 香皂 - 香皂



    第一行 DEFAULT_BUCKET_ID: 错误类型,这个懂点编程和操作系统知识的朋友用得上点
    第 三行 PROCESS_NAME: XXX.exe 这个是导致错误的进程,查出是什么文件导致的蓝屏后,再看这里就知道是谁调用了错误文件,比如你查出123.sys导致蓝屏,但你查不到123.sys是 哪个程序调用的,就可以用这个方法来看看,比如查出了是456.exe,你就可以在机子上或者网上搜索相关信息了

    展开全文
  • pycharm 远程开发与调试为什么需要远程开发与调试pycharm配置远程开发环境添加远程解释配置远程服务器信息选择远程解释查看远程解释的库远程调试 为什么需要远程开发与调试 ...那么有什么办法能解决这...

    为什么需要远程开发与调试

    在用python进行机器学习开发时,很多时候都需要使用linux,因为某些库只能安装在linux上,windows下安装某些python库是非常麻烦的,但是linux上的IDE用起来不是很舒服。那么有什么办法能解决这个问题呢?答案是远程开发与调试。
    先在linux服务器上部署需要的python 环境,然后借助pycharm,我们可以在windows或mac下进行编码开发,通过配合远程调试,直接使用liunx服务器上的环境来调试,这样即可以绕过windows下部署环境的各种蛋疼问题,也可以享受window的舒服的开发环境。

    pycharm配置远程开发环境

    注意pycharm 专业版才有这个功能

    添加远程解释器

    ctrl+alt+s 打开设置->搜索interpreter->点击添加解释器
    添加解释器

    配置远程服务器信息

    选择 ssh interperter,填写远程服务器的ip,端口,用户名,点击下一步
    填写远程服务器信息
    填写完密码直接下一步验证,如果密码错误会提示修改。
    在这里插入图片描述

    选择远程解释器

    1.点击右边添加远程解释器,和添加本地解释器一样,找到python就行,用conda的话找到需要的环境的python就行。
    2.设置同步目录(映射目录),将本地项目映射到远程服务器上的某个目录,一般会默认设置一个,如果没有,或者想要自己配置路径则可以点击右边添加映射。
    配置远程解释器

    查看远程解释器的库

    经过上面步骤,远程解释器已经添加完成,pycharm解释器配置界面会自动刷新远程解释器所带的库,也可以像操作本地环境一样,在这里直接安装库。
    远程解释器的库

    远程调试

    通过上面配置,我们已经连接到了远程服务器上的解释器,在项目上右键->deployment->update to xxx。就可以将本地代码部署到服务器,然后配置项目debug的解释器为远程解释器。点击运行,就能像本地环境一样进行debug调试了。

    远程debug

    展开全文
  • 用什么工具开发C++

    2018-03-28 09:54:25
    开发工具一般说来包括编辑器,编译链接类的相关工具,调试器。在不同的平台下都自己推荐的开发套件,在Windows上通常是VC。如果你想从Windows上转到Linux下,那么你...调试器用GDB,同样强大。写代码时可以使用W32...
  • 可按下组合键Ctrl+Alt+Del,调出“任务管理”,单击“新任务”,再在弹出对话框的“运行”后输入“C:WINDOWSexplorer.exe”,可马上启动Windows XP的图形界面,与上述三种安全模式下的界面完全相同。如果输入“c:...
  • 13.1.l 迭代遍历容器 13.1.2 仔细研究迭代 13.1.3 流迭代 13.1.4 为什么使用end() 13.1.5 复制列表 13.1.6 列表中的列表 13.1.7 STL字符串指针的麻烦 13.1.8 释放 STL指针 13.2 一个...
  • windowsnt 技术内幕

    2014-04-09 20:47:17
    Winn32.exe执行Windows NT升级 使用联机丛书 系统策略编辑简介 理解系统策略编辑模式 理解系统策略处理 在域控制上实现系统策略 在非域控制上实现系统策略 使用系统策略编辑复选框 从登录对话框中删除...
  • 前言:php其实不需要任何牛逼的开发工具,哪怕什么也不装,也可以txt编辑,我不推荐大家使用代码提示功能的开发工具,那样不利于大家的成长。而我们需要的无非是代码高亮,代码格式化,代码调试这几个基本功能,...
  • 什么我要选用这个编辑呢,原因二。一是它可以在linux和windows下运行。二是其轻量的体积。在原win10系统中他的爸爸--我们著名的vs2010,2011,2012等等,但此ide占用资源过多。vscode也可以很方便的安装各种...
  • vim for windows

    千次下载 热门讨论 2010-04-10 20:27:40
    用于windows下面的vim编辑。 给喜欢vim的人使用。详细如下: 好吧,详细点,这里写出一些基本的命令: 【什么是vi】 vi就是linux命令行下的最著名的编辑之一,(编辑就是类似windows记事本的功能,不过vi功能...
  • 调试器,但它的使用不局限于GNU操作系统, GDB可以运行 在UNIX、Linux甚至Microsoft Windows。 2、我们能GDB做什么 能设置断点使程序停住,从而观察变量的变化以及函数的执行情况,还可以跳过某些函数来查错
  • 如为什么程序运行后内存在不停的增加(Windows通过任务管理可以观察到)。因为分配了内存而没有释放,逐渐耗尽内存资源,后导致系统崩溃。内存泄露除了堆中的之外,还包括核心系统资源的内存泄露。那么在STL中目前...
  • 感觉很不方便,于是就了图形界面的Pycharm(如果是windows用户,这个IDE应该是标配),了一段时间也没有觉得有什么不好,不过,脑子里总是会想起《程序员修炼之道》中,那句”最好是精通一种编辑,并将其用于...
  • 感觉很不方便,于是就了图形界面的Pycharm(如果是windows用户,这个IDE应该是标配),了一段时间也没有觉得有什么不好,不过,脑子里总是会想起《程序员修炼之道》中,那句”最好是精通一种编辑,并将其用于...
  • 前言有时候程序长期运行以后会崩溃,这种错误往往有很隐蔽,不容易定位,如果程序在...有什么作用?Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到Dump文件中。Dump文件必须专用工具软件打开,...
  • Debugging Tools for Windows是微软出的一个调试工具,它可以对记录蓝屏信息的dmp文件进行分析 注:dmp文件,小存储转储文件 小存储转储文件记录可帮助确定计算机为什么意外停止的最小的有用信息集。...
  • STEP 1——编写一个最简单的系统调用最简单的系统调用当然是调了它之后什么都不干了,但是我还是决定让它干一件很是经典的事情,想调试器输出一条语句“Hello World!”。几乎每种编程技术的开始都由一个名为...
  •  其实很简单,随机数生成生成几个随机数再根据数据规模取模就可以了,(必要时可以增加一些特定测试点),代码就几行不做解释了(别问我为什么windows系统编程指令就是这样,想想hello为什么要这么拼写吧):...
  •  5、Windows XP的开机菜单有什么含义  现象:最近我安装了Windows XP操作系统,我知道在启动时按F8键或当 计算机不能正常启动时,就会进入Windows XP启动的高级选项菜单,在这里 可以选择除正常启动外的8种...
  • 利用内核调试器和其他的工具来检查内部系统结构;检查与进程、线程和作业相关的数据结构和算法;观察Windows如何管理虚拟内存和物理内存;理解NTFS的操作和格式,诊断文件系统访问问题;从上往下查看Windows的网络栈...
  • 从这些网站中,我学到一些编辑器,支持脚本编程,我学会了如何使用Visual Basic脚本调试器和对象浏览器等工具找出更多有关对象及其方法和属性。我是能够增加我的生产力显著,并创造一个相对舒适的环境脚本。 首先,...
  • 打算以后开始学做开发,主要语言perl和php 所以自然要先解决调试器和工作平台的问题。 说多么伟大的事情我也没那么多钱 去买正版软件 这里只是记录一下工具的使用方法 其实也说不上有什么技术含量,只是方便记录...
  • windows实用dos命令大全

    2010-12-10 21:27:35
    (1)“盘符”:指定要建立子目录的磁盘驱动字母,若省略,则为当前驱动;  (2)“路径名”:要建立的子目录的上级目录名,若缺省则建在当前目录下。  例:(1)在C盘的根目录下创建名为FOX的子目录;(2)在...
  • 图片预览

    2017-11-01 10:46:54
    某些函数也扩展了GNUC的一般功能,例如g_malloc函数就自己加强的调试功能。 GTK可以与多种语言绑定,包括C++, Guile, Perl, Python, Ton, Ada95, Objective C, Free Pascal, Eiffel。标准C开发的程序,编译软件...
  • 助于读者熟悉Windows内核驱动的体系结构,并精通信息安全类的内核编程技术。本书的大部分代码具有广泛的兼容性,适合从Windows 2000 一直到目前最新的Windows 7 Beta 版。  本书适合大专院校计算机系的学生、...
  • 助于读者熟悉Windows内核驱动的体系结构,并精通信息安全类的内核编程技术。本书的大部分代码具有广泛的兼容性,适合从Windows 2000 一直到目前最新的Windows 7 Beta 版。  本书适合大专院校计算机系的学生、...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 158
精华内容 63
关键字:

windows调试器有什么用