在上一篇博客 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 ) 对哈夫曼编码进行了介绍 , 如果需要在所有的 Android 手机上使用哈夫曼编码压缩图片, 那就需要使用 libjpeg-turbo 函数库 , 从 libjpeg-turbo/libjpeg-turbo GitHub 项目的 Release 发布版本页面 下载 Release 版本的源码 , 这里下载最新的 Source code (tar.gz) 源码 ;
本文主要讲述linux平台x86(及x86-64)架构下的ffmpeg编译安装过程。 其他嵌入式平台需要交叉编译,过程类似,不详述。 本实验在opensuse和ubuntu两个平台作了验证。使用lsb_release -a命令查看系统发行版版本: opensuse平台版本:openSUSE Leap 42.3。 ubuntu平台版本:Ubuntu 16.04.5 LTS。
对于一个C++程序员来说,可能更多是是每天都在跟各种上层语义、设计模式、软件方法等等在打交道。但对于「一个C++程序是如何运行在机器上的」这件事可能会比较陌生。有时,遇到一些问题,在宏观角度看起来可能比较难以解释,但其实从底层出发,就能发现这个问题其实根本不算问题。类似的问题有:
指的是处理器加电或者复位后,ROM-BIOS读取启动硬盘的第一个扇区,512字节。该扇区的最后两个字节必须 是0x55 0xaa。
前面我们了解了计算机底层的一些知识,比如计算机体系机构、操作系统、数据库、以及网络的基础知识,今天我们来研究一下计算机底层的语言,相信有了基础知识的铺垫,对于后期的编程学习会有莫大的帮助。
索引寄存器的端口号是 0x3d4,可以向它写入一个值,用来指定内部的某个寄存器。比如, 两个 8 位的光标寄存器,其索引值分别是 14(0x0e)和 15(0x0f),分别用于提供光标位置的高 8 位和低 8 位。 指定了寄存器之后,要对它进行读写,这可以通过数据端口 0x3d5 来进行。 高八位 和第八位里保存这光标的位置,显卡文本模式显示标准是25x80,这样算来,当光标在屏幕右下角时,该值为 25×80-1=1999
ffmpeg主要用于音视频转码,以及增删水印等处理,是一款简单实用且强大的音视频处理工具。
该代码的功能是在屏幕上打印"hello os",这里不再过多解释这个代码,这段代码主要是为了后文介绍几个基础概念。
nasm -f <format> <filename> [-o <output>]
今天,学习了网上的汇编视频教程,非常好,有可能据王爽本人,据说他的《汇编语言》是很经典的数据,之所以学习是想了解一下计算机底层是怎么运行的,倒不是说要拿汇编来做嵌入式,因为现在的编译器已经比我们强多了。 学习汇编的念头是前几天看了《c语言标准和实现》的附录里面提到汇编的只知识,所以还是学习一下,帮助自己家人计算机内功,网上也有说csapp的第三章就是讲述汇编语言的,到时候可以拿来看看。 MASM32是国外的MASM爱好者Steve Hutchesson自行整理和编写的一个软件包,目前最高版本为11r版。
由于大部分的pwn都是在Linux平台下的,故下面所涉及到的汇编都是在Linux平台下的汇编。
机器指令是用二进制代码表示的 CPU 能够直接识别和执行的一种指令,不同的 CPU 架构有不同的机器指令集。汇编指令是将机器指令对应到便于记忆和书写的字符串(注意并非一一对应,同一汇编器可能存在多个汇编指令对应一个机器指令的情况),汇编指令编写完成后通过汇编器将其翻译成机器指令供 CPU 执行。
NASM Installation of NASM wget -c http://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.xz tar -xf nasm-2.14.02.tar.xz cd nasm-2.14.02 ls ./configure --prefix=/usr && make sudo make install version $ nasm -v NASM version 2.14.02 compiled on Ju
---- 概述 实现一个基于Intel x86的32位操作系统。 ---- 环境搭建 Ubuntu虚拟机。 Ubuntu - 汇编编译器NASM - C编译器GCC - 软盘绝对扇区读写工具dd - qemu虚拟机 - Bochs模拟器 - 磁盘映像工具bximage $ sudo apt-get install build-essential nasm 这里的build-essential软件包中包含GCC和GNU Make。 一些常用指令 汇编命令 $ nasm boot.asm
希望读者们都可以理解上述 C 代码的作用。但是,此代码在底层如何工作?我认为并非所有人都能回答这个问题,我也是。我可以用Haskell,Erlang,Go 等高级编程语言编写代码,但是在它们编译后我并不知道它在底层是如何工作的。因此,我决定采取一些更深入的步骤,进行记录,并描述我对此的学习过程。希望这个过程不仅仅只是对我来说很有趣。让我们开始吧。
不同的厂商对UEFI有不同的实现, 一种比较常用的开源实现是EDK2. EDK2是一个遵循UEFI标准和PI标准的跨平台固件开发环境.
movsb,movsw 这里有两个同样功能的指令区别在于,一次转移内存的大小,movsb 的传送是以字节为单位的,而 movsw 的传送是以字为单位的。 从ds:si地址复制到es:di,复制字节数由cx指定。
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/80095817
Sickle是一个shellcode开发工具,用于加速创建正常运行的shellcode所需的各个步骤。 Sickle主要有以下功能: 识别可能会导致shellcode无法正常执行的坏字符。 支持多种语言输出格式(python,perl,javascript等)。 通过STDIN接收shellcode并格式化。 在Windows和Linux环境中均可执行shellcode。 支持shellcode间差异性比较。 反汇编shellcode到汇编语言(例如ARM,x86等)。 快速错误检查 在实际测试当中,测试人
###1、下载openssl源码 https://www.openssl.org/source/ ###2、安装环境 vs2010 ActivePerl nasm(将nasm.exe所在目录加入到%PATH%中) ###3、编译 进入Visual Studio 命令提示(2010) 进入源码目录 执行perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32 执行set path=C:\Program Files (x86)\Microsoft SDKs\
很久以前我写过三篇关于如何编写Windows shellcode(x86 - 32位)的详细博客文章。文章初学者友好,包含很多细节。第一部分解释什么是shellcode,哪些是它的局限性,第二部分解释了PEB(进程环境块),PE(可移植可执行文件)文件格式和ASM(汇编程序)的基础知识,第三部分说明了Windows shellcode如何实际实现。这篇博客文
如果你学的第一门程序语言是C语言,那么下面这段程序很可能是你写出来的第一个有完整的 “输入---处理---输出” 流程的程序:
GNU最开始其实是一个操作系统,旨为打造一个开源免费自由的操作系统,目前操作系统还在完善中
Intel 处理器要求段在内存中的起始物理地址起码是 16 字节对齐的。这句话的意思是,必须是16 的倍数,或者说该物理地址必须能被 16 整除。 所以每个段的定义中都包含了要求 16 字节对齐的子句,所以必须有align=这个设置。align=16那么该段至少是16个字节。
最近要用到 libeay32.lib、ssleay32.lib 两个静态库文件,因为以前项目中其中一个文件在 64 位编译时选择的不是 MTd,而导致我引入该库以后提示运行时库和其他库声明冲突,其实实际原因就是生成选项不一样。最终我还是决定自己编译 openssl 的库来使用。
• 它要适用于所有实现技术,包括 FPGA(Field-Programmable Gate Array,现场可编程逻辑门阵列)、ASIC(Application-Specific Integrated Circuit,专用集成电路)、全定制芯片,甚至未来的制造元件技术。
在Linux操作系统中,一段C程序从被写下到最终被CPU执行,要经过一段漫长而又复杂的过程。下图展示了这个过程
0x00 前言 libjpeg-turbo是一个JPEG编解码库,支持x86, x86-64, ARM等系统下的指令加速,其性能号称是libjpeg的2-6倍。官网地址是:https://libjpeg-turbo.org/。github地址是:https://github.com/libjpeg-turbo/libjpeg-turbo。 Android中默认提供了libjpeg实现的JPEG编解码接口,但是测试下来性能不是很好,无法满足实际使用需求。因此,准备编译Android版本来用。 0x01 下载源
Squalr是一款功能强大的高性能内存编辑工具,同时它也是一款采用C#编写的黑客工具。它允许用户在windows桌面游戏中创建和分享作弊方案,其中的功能包括内存扫描、指针、x86/x64程序集注入等等。
最近使用IDA Pro查看一个x86的exe文件,发现为静态编译文件,其中包含大量的OpenSSL的库函数,于是上网搜索对应的签名文件,并没有找到该版本OpenSSL的库函数签名,便亲自做一个签名文件。
汇编流程, 云+的md好像不支持流程图(汗), 我给出md的流程图代码和对应图片.
FFmpeg是一个完整的、跨平台的解决方案,用于记录、转换和流化音/视频。 FFmpeg 采用 LGPL 或 GPL 许可证,提供了录制、转换及流化音/视频的完整解决方案。其包含了非常先进的音/视频编解码库 libavcodec。 FFmpeg 是在 Linux 平台下开发的 但是它同样也可以在其他操作系统环境中编译运行,包扩Windows、Mac OS 等系统。这个项目最早是由Fabrice Bellard 发起的,在 2004 年至 2015年由Michael Niedermayer 主要负责维护。许多 FFmpeg 的开发人员都来自 MPlayer 项目组,而 且当前FFmpeg也是被放在 MPlayer 项目组的服务器上的。其名称来自MPEG视频编码标准,“FF” 代表 “Fast Forward”。
这篇文章翻译自一篇英文技术博客。文章讲述了 Windows 7 x64 系统中对指定进程进行特权级别提升的原理和方法。原文链接在文后可见。
掌握黑客技术一大难点就在于你要非常深入计算机技术的底层。绝大多数程序员只愿意在上层应用上花点时间,毕竟他们只想”混饭吃“,任何有志于不断提升技术能力的工程师都必须跨过几个高门槛,一个是算法,一个是系统设计,还有就是掌握计算机体系结构,与底层,与硬件打交道,这些知识点难度大,有些甚至很枯燥,因此愿意专研的人不多,我们本节所要描述的汇编语言就属于计算机体系结构的一部分。
不同的处理器指令集不一样,而汇编语言中都是一条条指令,所以不同处理器对应的汇编语言必然不一样。
受集成JIT以实现加速执行器的启发,我认为使用现代硬件的SIMD指令可以显著加速面向数组数据的简单算法。我想通过hex_encode例子介绍这样的编程风格:
上一篇文章中,我们介绍了如何创建一个简单的引导扇区,触发 BIOS 中断,从而在计算机屏幕上显示出一行我们想要的字符串。 计算机是如何启动的?如何制作自己的操作系统
使用前设置ss堆栈段的寄存器,设置sp栈顶偏移地址,此处都为0, 原因是主引导程序从0x7c00开始,那么两个是不是冲突呢?后每次压栈时,SP 都要依次减 2,即 0x0000-0x0002=0xFFFE于是与主引导程序是不会冲突的。
yum install gcc make nasm pkgconfig wget curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel libtool mhash.x86_64 perl-Digest-SHA1.x86_64 pcre.i386 pcre.x86_64 pcre-devel.i386 pcre-devel.x86_64
为了阅读Linux内核源代码,是需要一些汇编语言知识的。因为与架构相关的代码基本上都是用汇编语言编写的,所以掌握一些基本的汇编语言语法,能够更好地理解Linux内核源代码,甚至可以对各种架构的差异有一个更深入的理解。
Bread是一款功能强大的BIOS逆向工程和高级调试工具,该工具也是一个“可注入”的实模式(Real-Mode)x86调试器,可以帮助广大研究人员通过串行线缆从另一台电脑调试任意实模式代码。
文章目录 一、报错信息 二、解决方案 一、报错信息 ---- 在 Ubuntu 中编译 FFmpeg 时 , 报错 ; 核心报错信息 : nasm/yasm not found or too old. Use --disable-x86asm for a crippled build. 完整报错信息 : -------------------- [*] check ffmpeg env -------------------- -------------------- [*] configurate ff
机器之心转载 作者:CJ Ting 最简单的 C 语言 Hello World 程序,底层到底发生了什么?如何编写出最小的 64 位 Hello World 程序? Hello World 应该是每一位程序员的启蒙程序,出自于 Brian Kernighan 和 Dennis Ritchie 的一代经典著作 The C Programming Language。 // hello.c#include <stdio.h>int main() { printf("hello, world\n"
CMD->Developer Command Prompt for VS 2019 (vs自带的命令行环境,也可以直接CMD执行 C:\"Program Files (x86)"\"Microsoft Visual Studio"\2019\Community\Common7\Tools\VsDevCmd.bat) 0. 软件安装/配置环境
到目前为止,Sqlcipher源码就编译完成了。接下来就可以参考第一篇参考文章尽情使用该软件啦。
如果需要提取shellcode的话应该使用汇编来写提权代码,如下代码就是一段提权代码。64位系统堆栈结构已经变得和32位大不相同了
从2010年开始的RISC-V 项目,已经有10年的时间,RISC-V基金会先后批准了RISC-V Base ISA, Privileged Architecture,Processor Trace等规范。RISC-V对Linux的基本支持也已经完成。本文尝试通俗易懂的介绍RISC-V对于Linux的基本支持,包括指令集和异常处理。内存管理,迁移到RISC-V,UEFI,KVM等支持,欢迎继续关注本公众号。
下面的所有资料 , 都可以在博客资源 https://download.csdn.net/download/han1202012/31843542 中下载 ;
领取专属 10元无门槛券
手把手带您无忧上云