Orange AIpro Color triangle帧率测试
OpenGL概述OpenGL ES是KHRNOS Group推出的嵌入式加速3D图像标准,它是嵌入式平台上的专业图形程序接口,它是OpenGL的一个子集,旨在提供高效、轻量级的图形渲染功能。现推出的最新版本是OpenGL ES 3.2。OpenGL和OpenCV OpenCL不同,OpenCV主要用于计算机视觉和图像处理。它提供了一系列算法和函数,用于图像处理、对象检测、机器学习,而OpenGL专注于图形渲染,帮助开发者绘制复杂的2D和3D图形,主要应用于视频游戏、虚拟现实,OpenCL则是一个并行计算框架,主要用于编写并行程序。
本文目的我们这里在Orange AIpro上写了一个color triangle程序,color triangle程序在图形学的地位类似于编程语言学习的Hello World了,可以说人尽皆知了。这边文章介绍了在Orang AIpro上开发运行OpenGL color triangle 并查看帧率
本文使用的窗口管理用SDL2开发,SDL2是一个非常底层的跨平台的多媒体库,主要用于开发2D游戏和多媒体应用程序。提供能了图形、音频、输入输出设备、窗口管理等,功 ...
逻辑分析仪的使用
工具esp32 逻辑分析仪
准备工作使用vscode中的Platform IO插件build upload程序到esp32中,安装platfor IO工具有几个注意的点
1. 不能使用系统python自带的python工具执行pip install platformio,这会导致vscode中打开失败,只有网页127.0.0.1:8008可以访问pio home
2. 设置中搜索platformio-ide:custom path中编辑json文件,在里面添加系统环境变量中python的路径:
1"platformio-ide.customPATH": "C:\\Users\\zhonghui\\AppData\\Local\\Programs\\Python\\Python312\\Scripts"
code1234567891011121314151617181920212223242526272829303132#include <Arduino.h>int flag = 0;// 设置串口波特率void setup() ...
虚函数
引言最近在找工作,投了一些c/c++开发工程师,几乎每一个面试官都会问我虚函数的问题,而我面试快一个月了,八股文还是没怎么背,一直在学习Linux驱动开发,这几天我狠下心来,花一天的时间好好整理了以下虚函数的知识点,做个总结,以至于后面再被面试官问到不会一脸懵逼。
虚函数的简介c++中的三大核心机制是封装、继承、多态。多态分为静态多态和动态多态,静态多态是指函数重载和运算符重载,动态多态的体现则是虚函数。c++中实现虚函数功能的方式是做虚函数表(Virtual Table,VTBL)。在编译阶段,编译器会为每一个有虚函数的类产生一张虚表,每一个虚函数在表表中,虚表的每一项为虚函数的函数指针,这样,当类对象被定义时,对象中就有一个指向虚表的指针,这个指针就是vptr,当对象调用虚函数时,通过vptr找到虚表,再通过虚表找到虚函数的地址,这样就实现了动态绑定。
如何识别虚表
编写一个简单的例子,如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515 ...
x86指令集和arm指令集部分对比
一、x86 ISA
指令组成
由图一可知一条x86的指令可分为Instruction Prefixes、Opcode、Mod R/M、 SIB 、Displacement、Immediate这六个部分,其中Opcode为必选部分,其他都为可选部分。
二、指令各部分解析
Instruction Prefixes(可选部分)指令前缀这部分被划分为Lock和重复前缀、段前缀、操作数长度修饰前缀、地址长度修饰前缀四组。
Lock前缀:在destination oprand为内存操作时时,在部分特定的指令前加上lock前缀保证为原子操作,若非这部分特定指令,执行会抛#UD异常
循环前缀:在movs指令前添加rep 、repnz循环前缀
1234F0:8300 02 lock add dword ptr ds:[eax],2 8300 02 add dword ptr ds:[eax],2 F2:A4 repne movsb F3:A4 rep movsb
段前缀:用作内存访问权限控制
1234562E:C700 01000000 ...
构建一个CPU模拟器
一、概述本章节介绍的是windows环境下unicorn框架和capstone框架的使用。
二、工具Visual stdio 2019
Cmake
Git
三、构建步骤
clone unicorn和capstone框架的源码。(注意clone的分支为最新版本,不是master)
12git clone https://github.com/unicorn-engine/unicorn.gitgit clone https://github.com/capstone-engine/capstone.git
编译unicorn
使用git bash或者cmd进入unicorn目录,执行下面几条命令
123mkdir buildcd buildcmake .. -G "Visual Studio 16 2019" -A "x64" -DCMAKE_BUILD_TYPE=Release
接着在build目录下会生成一个unicorn.sln文件,使用visual stdio 2019打开,编译输出。在build目录下会生成unicorn.lib, ...
ubuntu用kvm启动虚拟机搭建调试环境
查看系统是否支持硬件加速12sudo apt install -y cpu-checker$(kvm-ok)
一般物理机在物理机上执行都是支持硬件加速
下载kvm组件1sudo apt install -y qemu qemu-kvm libvirt-daemon-system libvirt-clients virt-manager virtinst bridge-utils
下载系统iso镜像文件
国内下载源
123456### 清华源 ubuntu-release 中存放的为系统镜像https://mirrors.tuna.tsinghua.edu.cn/https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/### 阿里源 https://mirrors.aliyun.com/oldubuntu-releases/
使用virsh 虚拟机管理工具启动虚拟机12345678910111213141516171819 ...
linux kernel debug + vscode debug
编译x86版本linux kerne123456789# 打开调试选项make menuconfig# 打开 kenel kacking -> compile-time checks and compiler options -> debug infomation -> rely on # the toolchain's implicit default DWARF version# 保存退出,如果编译错误,执行 make clean && make defconfig全部设置为默认选项,然后重新打开上面选项make -j$(nproc)# 编译成功后输出为 x86格式,文件为./arch/x86/boot/bzImage# 其中当前目录下的 vmlinux 为gdb调试使用的符号文件
编译arm版本linux kernel12345678910111213# 下载交叉编译工具链sudo apt install gcc-arm-linux-gnueabihfsudo apt install g++-arm-linux-gnueabihf# ...
linux命令行版本clash增加web dashboard
命令行所添加web组件下载地址:1234567https://github.com/haishanh/yacd/https://github.com/haishanh/yacd/releaseswget https://github.com/haishanh/yacd/releases/download/v0.3.7/yacd.tar.xz## 教程地址https://parrotsec-cn.org/t/linux-clash-dashboard/5169
clash运行命令1sudo /home/ubuntu/zhonghui/vpn/clash -d /home/ubuntu/zhonghui/vpn/ -f /home/ubuntu ...
RISC-V Linux kernel debug 环境搭建
一、目的搭建qemu-gdb risc-v64 linux kernel的调试环境。
二、准备工作Build Ninja 和riscv-toolchain
首先安装必要的库(这是编译riscv toolchain必须安装的库文件)
12345678910111213141516171819202122232425sudo apt update sudo apt upgrade sudo apt install git \ autoconf \ automake \ autotools-dev \ ninja-build \ build-essential \ libmpc-dev \ libmpfr-dev \ libgmp-dev \ libglib2.0-dev \ libpixman-1-dev \ libncurses5-dev \ libtool \ libexpat-dev \ zlib1g-dev \ curl \ gawk \ bison \ flex \ texinfo \ gperf \ patchutils \ bc
Build Ninja
1234git ...
游戏修改器(一)瞬移
一、概述第一次尝试写游戏修改器教程,有些忐忑,纠结了好久,不知道写什么游戏好,最后决定找一个二十年前的老游戏,比较简单,很容易上手。游戏修改器的知识都是和内存、汇编这些相关,而这些知识也算是比较枯燥的了。我希望出这样的一些教程,能够激起大家学习内存相关知识的兴趣。第一次写这样的文章,希望大家能够看懂理解并自己实现吧。
最后只想再说一句:游戏修改器最基础的概念就是内存,一切操作都是基于内存!!!
二、工具
Cheat Engine 7.2
x32dbg
Visual Studio 2019
使用Windows MFC开发
三、实现步骤我们知道,在cs1.6这个FPS游戏中,每个人物的定位都是由坐标定位的,这个通常都是为笛卡尔坐标系。所以首先需要找到人物的坐标位置。
搜索人物坐标
首先模糊搜索float型未知的初始值(开始不知道是什么类型时,把整形、float、double都尝试就能找到)
设置搜索快捷键,这个设置成自己习惯的按键(若和游戏按键冲突会造成不太方便)。
在游戏中平地上随意走动,鼠标随意晃动,搜索未变动的数值,跳跃搜索变动的数值,落地后再搜索一次变动的数值 ...