- 博客(16)
- 资源 (2)
- 收藏
- 关注
原创 编程练习题——猴子吃桃
题目描述猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。输入N输出桃子总数样例输入10样例输出1534------------------------------------------------------------------------------------------
2021-04-23 13:44:44 470
原创 手工编译openjdk8
编译之前一定要去阅读官方文档!!OpenJDK Developers’ GuideOpenJDK Build README准备工作编译openjdk8,首先要做一些准备工作。建议的环境如下:gcc:4.8.2g++:4.8.2make:3.81另外还需要Oracle jdk7作为bootstrap JDK,在执行configure时使用--with-boot-jdk指定Oracle jdk7路径。(注意:make执行时不能设置JAVA_HOME)我的环境是ubuntu
2021-03-25 11:15:18 255 1
原创 栈溢出攻击示例(shellcode打印/etc/passwd内容)
参考:https://blog.csdn.net/omnispace/article/details/51005934在实验之前,首先需要关闭操作系统的ASLR,否则每次内存地址都会发生变化。关闭ubuntu操作系统的ASLR需要以root权限执行命令(文件内容默认为2,且操作系统重启后自动恢复):echo 0 > /proc/sys/kernel/randomize_va_space漏洞代码入下:#include <stdio.h>#include <stdl
2020-12-02 11:10:13 427
翻译 lstat系统调用简介
参考:https://www.man7.org/linux/man-pages/man2/lstat.2.html用于获取文件状态的函数:stat、fstat、lstat、fstatat其中,lstat获取符号链接状态函数声明
2020-07-24 11:39:47 367
原创 打印vector容器的模板函数
今天在测试vector的时候想写一个vector的打印函数。为了测试不同数据类型的vector,肯定是编一个模板函数。然后就报错。直到看了《理解typename的两个含义》才明白哪里出错。下面是最后正确的代码:#include<vector>#include<string>#include<iostream>using namespace std;template <typename T>void print_vec(vector<T&g
2020-07-06 10:08:41 600
原创 Linux0.11内核完全注释--vsprintf函数
#include<stdarg.h>#include<stdio.h>#include<string.h>#define ZEROPAD 1 /* pad with zero */#define SIGN 2 /* unsigned/signed long */#define PLUS 4 /* show plus */#define SPACE 8 /* space if plus */#define LEFT 16 /* left justi
2020-06-17 10:34:05 524
原创 C语言调用内嵌汇编实现的函数的例子
一个C语言调用内嵌汇编实现的函数的例子。extern inline int my_strncmp(const char * cs, const char * ct, int count){ register int __res; __asm__("cld\n" "1:\tdecl %3\n\t" "js 2f\n\t" "lodsb\n\t" "scasb\n\t" "
2020-06-15 12:29:50 637
原创 Linux内核完全注释(v0.11)--get_base()、get_limit()
阅读Linux内核完全注释traps.c,发现有个函数赵博士没有说明。好吧,自己动手丰衣足食。traps.c里源码第72行是这样的:printk("base: %p, limit: %p\n", get_base(current->ldt[1]), get_limit(0x17));这个get_base()函数在sched.h里定义的:#define _get_base(addr) ({\unsigned long __base; \__asm__("movb %3,%%dh\n\t"
2020-06-11 18:55:13 415
原创 Linux内核学习遇到的汇编指令
Linux内核学习遇到的汇编指令cldclear direction,控制edi指向的字符串地址变化方向是从低到高。stdset direction,repnerepeat not equal,当不相等时重复。与它相对的是repe,当相等时重复。scasb【al】–【di】,比较查询di中是否有al中的字符,每比较一次di自动变化,指向上一个或下一个单元。repne scasb扫描edi指向的字符串,扫描方向从低地址向高地址,如果遇到字节等于al或者ecx计数为0,则扫描结束。stos
2020-06-10 10:17:15 809
原创 嵌入汇编示例讲解
嵌入汇编介绍底层的C语言程序经常用到嵌入汇编(也称内联汇编)语句。经常写高级语言的同学应该很少接触到,一旦碰到两眼一抹黑。这里列举一个例子简单介绍下。如果有精力推荐Linux内核完全注释系统地学习。具有输入和输出的嵌入汇编语句基本格式如下:asm("汇编语句" :输出寄存器 :输入寄存器 :会被修改的寄存器);除了第一行,后面带冒号的行不适用就可以忽略(“:”需要保留,否则无法区分输出寄存器、输入寄存器还是会被修改的寄存器)。“汇编语句”是一系列汇编指令,用于实现某个功能
2020-06-09 21:42:10 618
原创 C语言中字符数组在内存中的存储
C语言中字符数组在内存中的存储C语言中字符数组使用比较常见。一般先分配一定容量的字符数组,然后赋值使用。字符数组的使用一定要注意,如果是通过下标逐个字符赋值,那么在结束的位置一定要赋一个0(或者\0,一样的)。另一种比较常见的情况,如果给字符数组赋值一个字符串,在无法判断字符串长度的情况下,一定要设置字符数组最后一个位置为0(或者\0),否则可能发生缓冲区溢出。原因在于字符数组用0表示结尾,0后...
2020-05-05 13:05:16 2481
producer_consumer_v2.c
2020-04-28
building the web of things Dominique D. Guinard
2018-01-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人