TATAMOBILE

tower

tower

Graduated in Computer Science and Engineering, but currently working with GNU/Linux infrastructure and in the spare time I'm an Open Source programmer (Python and C), a drawer and author in the TATAMOBILE Blog.

深入理解Qt

QObject

QObject类是Qt对象模型的核心,绝大部分的Qt类都是从这个类继承而来。这个模型的中心特征就是一个叫做信号和槽的机制来实现对象间的通讯,你可以把一个信号和另一个槽通过 connect 方法连接起来,并可以 …

More

深入理解CMake(一): FindPkgConfig

缘起

在某些FindXXX.cmake模块中经常出现下面这两条命令:

find_package(PkgConfig QUIET)
pkg_check_modules(PC_GLIB2 QUIET glib-2.0)

主要在一些第三方库没有提供CMake模块,只提供了pkg-config的配置,需要开发者自己开发CMake模块。 本文详细介绍这两条命令的含义。

搜索pkg-config

cmake_minimum_required(3.18 …

More

重学ELF文件格式

缘起

ELF文件格式的讨论已经存在非常多的文章,这里试图从另一个角度来讨论如何学习ELF文件格式。OAID SDK已经更新到1.0.30了,发现代码保护方式变化了,采用了自实现Linker方式来保护代码,libmsaoaidsec.so 就是负责释放真实的so。但本文不讨论释放和 …

More

JNI 方法注册和签名

缘起

最近分析一个Android平台上的so,发现JNI函数命名如下:

JNI Function Name

函数名字和自己平时写代码不一样,故重新学习JNI方法的签名规则。

规则

工具使用

可以使用javah自动生成JNI函数签名,来探索函数命名规则。

javah -jni 包名.类名

一般类的普 …

More

高级Python编程:元类

在正式开始之前,需要明确几个概念的中文和英文对照:

  • 类(Class)
  • 类型(Type)
  • 类的实例(Instance):在有些地方类的实例也可以叫对象,为与Python这个语境区分,本文用实例代替。
  • 对象(Object):在Python里,万 …

More

高级Python编程:装饰器

装饰器是一种设计模式,在Python中是一个非常有用的特性。可以在不修改函数、方法、类的情况下,修改(扩展)它们的行为。常见的装饰器如classmethod、staticmethod等,以@开始 加以使用,其实@只是Python提供的一个语法糖。

一个使用装饰器 …

More

测试代码

/* Unicorn Emulator Engine */
/* By Nguyen Anh Quynh, 2015 */

/* Sample code to demonstrate how to emulate ARM code */

#include <unicorn/unicorn.h>
#include <string.h>


// code to be emulated
#define THUMB_CODE "\x10\xb5\x4f\xf6\x00\x74\xe8\xbf\x10\xbd"

// memory address where emulation starts

int STACK_MEMORY_BASE = 0x00000000;
int STACK_MEMORY_SIZE = 0x00800000;

int HOOK_MEMORY_BASE = 0x1000000;
int HOOK_MEMORY_SIZE = 0x0800000;



static void hook_code …

More

代码

C++ 代码

#include <iostream>
using namespace std;
int main(int argc,char* argv[]){
  cout << "Hello,World" << endl;
  return 0;
}

Python 代码

# -*- coding:utf-8 -*-
import sys,os
if __name__ == '__main__':
  print('Hello,World')

引用代码

嵌入全文

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[]){
  string s = "Hello,Hexo";
  cout << s << endl …

More