Skip to content

Instantly share code, notes, and snippets.

View mfukar's full-sized avatar

Michael Foukarakis mfukar

View GitHub Profile
@mfukar
mfukar / dotd.py
Last active December 30, 2016 08:22
Log analyser for Dawn of the Dragons raids. Overengineered as fuck.
#!/usr/bin/env python
# @file dotd.py
# @author Michael Foukarakis
# @version 0.6
# @date Created: Sun Aug 25, 2013 09:57 BST
# Last Update: Fri Dec 30, 2016 10:21 EET
#------------------------------------------------------------------------
# Description: Log analyser for Dawn of the Dragons raids.
#------------------------------------------------------------------------
# History: None yet
@mfukar
mfukar / nuke-noscript.user.js
Last active March 24, 2016 07:09
Nuke <noscript> tags
// ==UserScript==
// @name nuke noscript
// @namespace https://gist.github.com/mfukar/d1dd369deaa7c3941fde
// @version 0.2
// @description Remove all <noscript> tags in every document
// @author mfukar
// @grant none
// ==/UserScript==
/* jshint -W097 */
'use strict';
/*
* Partial applied functions in C
* Leandro Pereira <leandro@tia.mat.br>
*/
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
@mfukar
mfukar / epic_fail_1.c
Last active December 16, 2015 10:28
Epic Fail UCS-2 to UTF-8 conversion.
/* This is how a PhD holder thinks UCS-2 is converted to UTF-8 */
size_t gsm_convert_ucs2(const uint8_t *buf, size_t length, unsigned char *dest)
{
size_t i;
size_t j;
for (i=0,j=0;i<length;i+=2) {
if (buf[i] == 0)
dest[j++] = buf[i+1];
else {
snprintf((char *)&dest[j], 256-j, "\\%02x%02x", buf[i], buf[i+1]);
@mfukar
mfukar / bitbuffer.py
Created December 3, 2015 10:52
A buffer of bits
import struct
class bitbuffer:
# TODO: need reader?
def __init__(self):
self.buffer = b''
self.byte = 0
self.bit_pos = 7
def append(self, value, nbits):
@mfukar
mfukar / memoizer.cpp
Created November 17, 2015 09:44
A generic memoizer class for C++14 functions
/**
* A memoizer (Y-combinator), with a cache on operator().
*
* The type of the function that can be memoized is (((Args...)->R), Args...) -> R, which
* makes the memoizer of type ( (((Args...) -> R), Args...) -> R ) -> ((Args...) -> R).
*
* WARNING: If the memoized function modifies its arguments, the results will not be
* cached correctly.
*/
#!/usr/bin/env python
# Useful common polynomials:
#POLY = 0x82F63B78 # CRC-32C (Castagnoli)
#POLY = 0xEB31D82E # CRC-32K (Koopman)
#POLY = 0xD5828281 # CRC-32Q
class CRCForger():
def __init__(self, *args, **kwargs):
@mfukar
mfukar / sort1mb.cpp
Created November 5, 2012 04:41 — forked from preshing/sort1mb.cpp
Sort one million 8-digit numbers in 1MB RAM
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef unsigned int u32;
typedef unsigned long long u64;
//-------------------------------------------------------------------------
// WorkArea
//-------------------------------------------------------------------------
@mfukar
mfukar / patchthree.asm
Created May 13, 2012 10:30
pctf '12 - supercomputer patches
; 0x4010e9:
mov rax,qword [0x601d38]
imul rax,rax,0xf7733c1
add qword [rbp-0x8],rax
add qword [rbp-0xc],0xf7733c1
mov rax,qword [rbp-0x8]
xor rdx,rdx
mov rcx,0x10bebc1fb ; the # in 2's complement from the original
div rcx
mov qword [rbp-0x8],rdx
@mfukar
mfukar / patchtwo.asm
Created May 13, 2012 10:12
pctf '12 - supercomputer patches
; 0x400ef8:
mov rax,qword [rbp+0x20]
mov edx,eax
sar edx,0x1f
xor eax,edx
sub eax,edx
cdqe
mov qword [rbp-0x8],rax
imul rax,qword [rbp+0x18]
add qword [rbp+0x10],rax