Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

如何利用GCC编译选项检测栈溢出

如何利用GCC编译选项检测栈溢出

Stack smashing是堆栈缓冲区溢出(stack buffer overflow)的一个时髦称谓。它表示利用代码中存在的缓冲区溢出bug而发起的攻击。在早期,这完全是程序员的责任,他们要确保代码中不存在缓冲区溢出的问题。但是随着时间推移,技术的不断发展,现在像gcc这样的编译器已经有编译选项用来确保缓冲区溢出问题不被攻击者利用来破坏系统或者程序。有一次当我试图重现一个缓冲区溢出的问题时我才了解到这些编译选项。我是在Ubuntu 12.04上进行试验...
交叉编译Python 3.3 压成1.5MB

交叉编译Python 3.3 压成1.5MB

在研究如何在嵌入式Linux上搭建Python运行环境,因为有了Python之后,很多工具例如GoAgent之类的东西就可以用上场了。昨天成功编译了Python2.6,参考了网上很多方法,但最后无果而终,现在总结了一套自己的编译方法,基本上可以秒杀所有Python版本的交叉编译,这里做一个总结。我的编译环境是Debian64位 无桌面版本,体积很小巧,安装在办公室电脑虚拟机里,在家里也可以远程编译代码。首先在Python网站下载最新版源代码,这里我使用Py...
C++中返回指向函数的指针学习

C++中返回指向函数的指针学习

int *p() 定义一个函数,该函数返回一个指向整型元素的指针变量int (*p)() 指向函数的指针,该函数返回一个整型值在C++ primer 238页中出现的int(*ff(int))(int*,int) ,解释为:ff(int)是一个函数,带有一个int型的形参,所以,这个首先是一个函数。如下面例子中的int (*funOne(int number))(int a, int b)的funOne(int number).其返回的使int (*)(i...
Hadoop之MapReduce自定义二次排序流程实例详解

Hadoop之MapReduce自定义二次排序流程实例详解

一、概述MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的。在我们实际的需求当中,往往有要对reduce输出结果进行二次排序的需求。对于二次排序的实现,网络上已经有很多人分享过了,但是对二次排序的实现的原理以及整个MapReduce框架的处理流程的分析还是有非常大的出入,而且部分分析是没有经过验证的。本文将通过一个实际的MapReduce二次排序例子,讲述二次排序的实现和其MapReduc...
编程语言拟人化:Java、C++、Python、Ruby、PHP、C#、JS

编程语言拟人化:Java、C++、Python、Ruby、PHP、C#、JS

Java犹如宫泽贤治的《不畏风雨》中出现的、性格木讷的女孩子。从小就由于迟钝和大食量等特征被别人当作笨蛋,从小学入学开始进入田径部、坚持跑步,在中长跑中经常取得好成绩,给人以活泼的印象。是十分努力的女孩子。她的家境并不算好。父亲Sun是有才能的艺术家,但不擅长理财,在她14岁的时候因为苦于借债积劳成疾而去世。她被Oracle叔叔收养,那时还与Google叔叔之间因为对她的扶养权问题而引起争端并闹上法庭。在周围的人都担心,正值青春期时她在这样的处境下会不会一...
Java中的动态代理模式

Java中的动态代理模式

前言:最近一直在分析Hadoop的RPC机制。在hadoop中,DataNode和NameNode之间的控制信息的交流是通过RPC机制完成的,采用的是动态代理和java NIO的方式。DataNode端是通过获得NameNode的代理,通过该代理和NameNode进行通信的,为了更好的分析hadoop的RPC机制我想先分析一下动态代理是怎么实现。下面就是动态代理的最最简单的代码实现,我们一起来看看吧。代码如下:package cn.xiaolu;impor...
Linux网络编程--服务器客户端(TCP实现)

Linux网络编程--服务器客户端(TCP实现)

Linux下的一个服务器客户端的小程序,基于TCP的实现;服务器可以同时接受多个客户的接入,通过子进程处理客户请求,下面的例子中,服务器只将客户的IP和端口以及发送的信息显示,然后原样的将客户发送的信息发送给客户。客户端仅仅是输入信息以及显示收到的信息。TCP通信的模式如下图,比较固定,对着图编代码就可以了:服务器的main函数:int main(int argc, char **argv){int listenfd, connfd;pid_t child...
Linux下基于OpenCV的摄像头数据采集与传输

Linux下基于OpenCV的摄像头数据采集与传输

最近一段时间在搞摄像头的采集和传输。采集通过OpenCV自带的函数库,不用自己编写V4L2,省去了很多事情。主要工作就是在视频的传输了。主要思路是:将采集的一帧视频图像压缩成jpg格式的图片,这样进行过压缩的数据量大大减少。然后通过socket的UDP传输协议将图片通过网络传送到客户端。我之前用的TCP传的,总是有部分数据丢失重传,导致现实界面偶尔出现闪动,出现的错误提示:Corrupt JPEG data: premature end of data s...
Java多线程:一道阿里面试题的分析与应对

Java多线程:一道阿里面试题的分析与应对

引言: 通过多线程的面试题目分析,来深入理解Java线程的状态转变过程。最近在学习Java多线程设计的时候,在网上看到一个面试题目的讨论,虽然楼主所说有些道理,但感觉还是有些问题,故此在和同事讨论以后还是有了若干收获,在此略作总结。首先,来看看这个面试题目吧。 public class MyStack { private List<String> list = new ArrayList<String>(); ...
二叉搜索树之Java实现

二叉搜索树之Java实现

什么是二叉搜索树二叉搜索树(Binary Search Tree),是最基础,且相对简单的一种数据结构,支持Insert,Delete,Search,Min,Max,Successor,Predecessor等操作。最大的特点是每一个节点有不超过两个子节点,并且左子节点小于或者等于父节点,而右节点大于或者等于父节点。说它基础,是因为很多其它树形数据结构以它为原型而扩展,比如红黑树,B树。相关阅读:二叉树的常见问题及其解决程序 http://www.linu...
Linux C程序内存泄露检测

Linux C程序内存泄露检测

对于程序员来说,最痛苦的就是内存的申请与释放。内存泄露也是程序中经常遇到的问题。为了更好的定位内存泄露问题,我们有必要熟悉一些内存泄露的检测工具。今天主要找到了以下四个内存检测工具,使用起来都比较方便。valgrind安装valgrind,执行下列程序#include <stdlib.h>void func(){ int *p = malloc(10*sizeof(int)); p[10] = 0;}int main(){ f...
jQuery判断元素是否存在

jQuery判断元素是否存在

在jQuery中判断元素是否存在的代码:if ($("#tiprow").length > 0) { alert("表示元素存在"); }else{ alert("元素不存在"); }如果元素不存在就在else后面执行。如果在js中取得对象后要先判断对象是否存在,而在jQuery中不需要。因为如果对象不存在,jQuery会自动屏蔽掉对于不存在元素的操作。jQuery 的详细介绍:请点这里jQuery 的下载地址:请点这里推荐阅读:...
C语言可变参数

C语言可变参数

C语言的函数可以有可变数量的参数,这可以用宏来实现,这个宏定义在stdarg.h中。需要用的宏有va_start,va_arg,va_end,还需要用到类型va_list.使用va_list定义一个变量,这个变量用来存放可变参数的列表,va_start从这个列表中读取变量,va_arg用于返回当前的参数值,并且指向下一个可变参数,在可变参数处理完成后,还要调用va_end()。可变参数的实现简单实例:# include <stdio.h># i...
<< 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 >>