Skip to content

Instantly share code, notes, and snippets.

@Geal
Geal / iteratees.rs
Last active September 13, 2015 19:00
nom iteratees
// Context:
// * Rust n'a pas de TCO, donc on ne peut pas faire de récursion facilement
// * la gestion de l'ownership fait que le résultat d'une passe sur le
// contenu du Producer ne vivra pas plus longtemps que son buffer (sauf si on cpone les données)
// * les Producers et Consumers actuels passent leur temps à copier des buffers,
// je veux limiter ça au Producer
type Computation<I,O,S,E> = Fn(S, Input<I>) -> (I,Consumer<I,O,S,E>);
enum Input<I> {
; ModuleID = 'nom_http.0.rs'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-darwin"
%"9.nom::internal::IResult<&'static [u8], &'static [u8], u32>" = type { i64, [0 x i64], [5 x i64] }
%"2.core::ops::RangeTo<usize>" = type { i64 }
%"2.core::ops::Range<usize>" = type { i64, i64 }
%"9.nom::util::ErrorKind<u32>" = type { i32, [0 x i32], [1 x i32] }
%"2.core::ops::RangeFrom<usize>" = type { i64 }
%"9.nom::internal::Err<&'static [u8], u32>" = type { i8, [7 x i8], [4 x i64] }
@Geal
Geal / test.rs
Created February 23, 2016 21:02
custom backtracking with nom
#[macro_use]
extern crate nom;
use nom::IResult;
macro_rules! n (
($name:ident( $i:ty ) -> $o:ty, $submac:ident!( $($args:tt)* )) => (
fn $name( i: $i ) -> std::result::Result<nom::IResult<$i,$o,u32>, nom::Err<$i, u32>> {
std::result::Result::Ok($submac!(i, $($args)*))
}
macro_rules! separated_list2 (
($i:expr, $sep:ident!( $($args:tt)* ), $submac:ident!( $($args2:tt)* )) => (
{
let mut res = ::std::vec::Vec::new();
let mut input = $i;
// get the first element
let first = $submac!(input, $($args2)*);
if let $crate::IResult::Done(i,o) = first {
@Geal
Geal / ibe.rs
Last active July 24, 2016 18:30
extern crate bn;
extern crate rand;
extern crate sodiumoxide;
mod sighash;
use bn::*;
use sodiumoxide::crypto::stream::{self,chacha20};
use std::str;
@Geal
Geal / blogpost.md
Last active November 25, 2016 10:19
nom release blogpost

Nearly one year ago, on November 15th 2015, I released the 1.0 version of nom, the fast parser combinators library I wrote in Rust. A lot happened around that project, and I have been really happy to interact with nom users around the world.

TL;DR: it's new nom day! The 2.0 release is here! Read the changelog. Follow the upgrade documentation if it breaks stuff.

Interesting usage

I wouldn't be able to list all the projects using nom on this page, even the subset present on crates.io, but here are a few examples of what people built with nom:

//! AccReader is like a BufReader, but supports partial consumption
//! import new data with `fill_buf`, get the current buffer with
//! `current_slice`, and indicate with `consume` how many bytes
//! were used
use std::io;
use std::io::{Read,BufRead};
use std::iter::{repeat,Iterator};
use std::cmp;
@Geal
Geal / fork-exec.rs
Last active December 24, 2019 02:26
extern crate nix;
extern crate libc;
use nix::sys::signal::*;
use nix::unistd::*;
use nix::fcntl::{fcntl,FcntlArg,FdFlag,FD_CLOEXEC};
use libc::c_char;
use std::mem;
use std::str;
@Geal
Geal / tp.md
Created February 6, 2017 12:18

B3 Piratage éthique 2017 - TP développement d’exploits

Le but de ce TP est de gagner en compétences sur la recherche de failles de sécurité, en étudiant des vulnérabilités existantes et en développant des exploits pour celles-ci.

Vous travaillerez en groupe de 3 ou 4 personnes.

Vous choisirez dans la première demi-heure un logiciel à attaquer. Voici les critères recommandés:

  • Open source, pour faciliter l’étude du code contenant la faille
  • Choisissez une vulnérabilité connue et publiée dans une version dépassée du logiciel
TRACE:mio::sys::unix::kqueue: registering; token=Token(18446744073709551615); interests=Ready {Readable}
TRACE:mio::poll: set_readiness event Ready {Readable} Token(0)
DEBUG:tokio_core::reactor: adding a new I/O source
TRACE:mio::poll: registering with poller
TRACE:mio::sys::unix::kqueue: registering; token=Token(2); interests=Ready {Readable | Writable | Hup}
DEBUG:tokio_core::reactor: consuming notification queue
DEBUG:tokio_core::reactor: scheduling direction for: 0
TRACE:mio::poll: custom readiness queue has pending events
TRACE:mio::poll: returning readiness event Ready {Readable} Token(0)
DEBUG:tokio_core::reactor: loop poll - Duration { secs: 0, nanos: 173303 }