xxの機能により KPI を伸ばす!
- A によって B が増える
#!/usr/bin/env python3 | |
# -*- coding: utf-8 -*- | |
import numpy as np | |
import matplotlib.pyplot as plt | |
n = 100 | |
# x,yのデータ | |
x = np.arange(0, n, 1) |
MIPSのABIは変だという話をこないだのシステムプログラミング会でしたら、ややザワッとしたので、なにがおかしいのかというのをちょっとまとめてみました。まとめてみて思いましたが、やっぱりMIPSのELFファイルはちょっと変です。
これが僕は一番ひどいと思ったものです。
ファイルにマルチバイトの数値を保存するときはエンディアンというものが問題になります。たとえば0xBEEFという2バイトの数を保存するときは、1バイト目にBE、2バイト目にEFを書くか、逆順で書くかは、ただの決まり事でどっちでもいいわけですが、書く側と読む側で認識があっていないと困ります。世の中的にはリトルエンディアン(下位バイトから書く)のが主流ですがビッグエンディアンなシステムもあります。
それがですね、MIPSのELFヘッダのr_infoという64ビットのフィールドはリトルエンディアンでもビッグエンディアンでもない謎なエンコーディングになっています。具体的には下位32ビットが最初にリトルエンディアンで書かれていて、ビッグエンディアンでエンコードされた上位32ビットがそれに続くという構成になっています。つまりリトルエンディアンだとABCD EFGH、ビッグエンディアンだとHGFE DCBAとなるところが、MIPSのmixed endianだとEFGH DCBAというふうにファイルに書かれていることになります。
公式リファレンス: pwntools
最新版を降らせる
pip install "git+https://github.com/Gallopsled/pwntools#egg=pwntools"
IGGG Advent Calender 2015のために書いた記事です。
常設CTFで遊んでたらPwnable系の問題を解いてるうちにいろいろと勉強になったのでまとめます。
PwnableとはCTFのジャンルの1つで、プログラムの脆弱性をつき、本来アクセスできないメモリ領域にアクセスして操作し、フラグを取得する感じの問題です。
別名としてExploit
があります。
cmake_minimum_required(VERSION 2.8) | |
project( imageproc ) | |
find_package(OpenMP REQUIRED) | |
if(OPENMP_FOUND) | |
message(STATUS "Enabling OpenMP support") | |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") | |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") | |
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") | |
else() |
# count = 計算回数 | |
# precision = 精度 | |
function y = wallis_formula(count,precision) | |
output_precision(precision) | |
i = 1 | |
a = 1 | |
while(i<=count) | |
num = 4*(i^2) | |
a = a * num/(num-1) | |
i++ |
COMPILER = g++ | |
CFLAGS = -g -MMD -MP -Wall -Wextra -Winit-self -Wno-missing-field-initializers | |
ifeq "$(shell getconf LONG_BIT)" "64" | |
LDFLAGS = | |
else | |
LDFLAGS = | |
endif | |
LIBS = | |
INCLUDE = -I./include | |
TARGET = ./bin/$(shell basename `readlink -f .`) |