摘要: go-containerregistry 实战篇之容器镜像下载 一、库介绍 go-containerregistry 是 google 公司开源的用于处理容器镜像的golang客户端库,它提供了一个对镜像的操作接口,这个接口背后的资源可以是 镜像仓库的远程资源,镜像的tar包,甚至是 docker 阅读全文
posted @ 2022-03-05 13:37 codergeek 阅读(677) 评论(0) 推荐(0) 编辑
摘要: 本人想将技术博客从博客园搬家至csdn,请csdn编辑们允许通过,谢谢了 阅读全文
posted @ 2013-12-26 11:06 codergeek 阅读(150) 评论(0) 推荐(0) 编辑
摘要: http://yexin218.iteye.com/blog/545187 阅读全文
posted @ 2013-12-25 11:33 codergeek 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 1.使用DebugView查看输出信息对内核调试是做系统底层驱动开发的必修课,当然也是有兴趣才可能进行深入的挖掘。进行驱动调试可以有很多工具可以用,比如DebugView可以查看一些DbgPrint的输出的输出信息(当然它的功能还有其他)如下图(不好意思,图还在审核中): 点击菜单“Capture”,在弹出的菜单中勾选想要监控的输出信息,就可以在动态调试时看到你在程序中使用DbgPrint输出的信息!下面我们举一个驱动的小例子,来看下效果(相关资料可以参考驱动开发的教程《寒江独钓》)。实例1:首先要安装相应的工具,我们这里用到了,VMWare,WDK,DebugView,任意文本编辑... 阅读全文
posted @ 2013-12-24 12:33 codergeek 阅读(517) 评论(0) 推荐(0) 编辑
摘要: 编写驱动FirstDriver.c#includevoid MyDrvierUnload(){//}NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING RegistryPath){ DbgPrint("My First Driver!"); pDriverObject->DriverUnload = MyDrvierUnload; return STATUS_SUCCESS; }makefile在ddk中自带的驱动程序中找到一个makefile,windows的makefile中的内容都是 阅读全文
posted @ 2013-12-24 12:25 codergeek 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。静态库:在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件(.EXE文件)。在多个同样的程序执行时,系统保留了许多重复的代码副本,造成内存资源浪费。动态库:使用动态库时,有一个引入库lib和一个DLL。引入库lib包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数。使用DLL的动态链接并不是将库代码拷 阅读全文
posted @ 2013-12-24 07:33 codergeek 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 我和zhb一比,我还需要提高我自己的实际动手能力。他这几天来找我做防火墙,做防火墙嘛,现在主流的防火墙都是基于驱动来开发的,我俩决定先从驱动开始入手,zhb是个说干就干的性格,问了小b老师怎么样来写防火墙下载了驱动视频教程、下载了windows驱动开发包、在虚拟机中搭建了DDK驱动开发环境,并在第一时间内写出了一个hello world!我妈曾经说她老儿子我这人啊,做事总是没有长劲,三天打渔两天晒网的,不会有什么成就,还有就是我这人太看重感情了,会觉得感情比一切的东西都重要。这点学习的精神值得我学习,明白了怎么做以后,就放手全力去做,有些东西自己不尝试下根本不知道自己是错的,多尝试下没有坏处。 阅读全文
posted @ 2013-12-23 16:37 codergeek 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 第一种方法,调用回调函数#include "pcap.h"/* packet handler 函数原型 */void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);main(){pcap_if_t *alldevs;pcap_if_t *d;int inum;int i=0;pcap_t *adhandle;char errbuf[PCAP_ERRBUF_SIZE]; /* 获取本机设备列表 */ if (pcap_findalldevs_ex( 阅读全文
posted @ 2013-12-18 10:53 codergeek 阅读(1957) 评论(0) 推荐(0) 编辑
摘要: 网络接口有一个硬件地址,48bit的值,在硬件层次上进行的数据帧交换必须有正确的接口地址.tcp/ip有自己的地址,32bit的IP地址.但是知道主机的IP地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。arp的功能就是在32bit的ip地址和硬件地址之间提供动态映射。为什么点对点链路不使用arp呢?详细来解释下arp分组格式内容以及各个字段: 前两个字段是以太网目的地址和以太网源地址,目的地址为全1的地址是广播地址。 2个字节的帧类型,对于arp请求或者arp应答来说,该字段的值是0x0806 硬件类型字段表示硬件地址的类型,1表示以太... 阅读全文
posted @ 2013-12-17 08:47 codergeek 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 每台主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上各主机和路由器的IP地址和硬件地址的映射表,这些都是该主机目前知道的一些地址。当主机A要向本局域网上的某个主机B发送IP数据报时,先在其ARP高速缓存中查看是否有主机B的IP地 址。如果有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。也有可能查不到主机 B的IP地址的项目。这可能是主机B才入网,也可能是主机A刚刚加电,其高速缓存还是空的。在这种情况下,主机A就自动运行ARP,然后按以下步骤找到主 机B的硬件地址。实现地址解析的第一步是产生ARP请求帧。在 阅读全文
posted @ 2013-12-16 16:21 codergeek 阅读(355) 评论(0) 推荐(0) 编辑