首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux64程序移植

要获得能在64系统下运行的程序,特别是达到只维护同一套代码就能获得在32及64系统下都能运行的程序,编码时需遵循一定的原则,是一个较为繁琐的过程。...有些定义可以使代码的可移植性更好。 l ptrdiff_t: 这个值在32系统下是int,在64系统下是long,表示两个指针相减后的结果。...u”, arraysz); 64系统下代码应为: printf(“array size = %lu”, arraysz); 3.2 移植经验 3.2.1 如何判断一个可执行文件是32编译的版本还是...-h可执行文件名,看其中的Class 显示ELF64是64可执行文件 显示ELF32是32可执行文件 3.2.2 如何判断环境是32还是64 代码中: #if __WORDSIZE == 64...32系统的限制,特别是4GB的虚拟内存上限,已经极大地刺激很多公司开始考虑迁移到64平台上。了解如何将应用程序移植到64体系结构上可以帮助我们编写可移植性更好且效率更高的代码

4.5K82

汇编知识扫盲之16汇编跟32汇编的保护模式以及汇编代码编写

汇编知识扫盲之16汇编跟32汇编的保护模式以及汇编代码编写 一丶内存寻址模型   逻辑地址.线程地址.物理地址 了解汇编之前.先了解一下上面这些词的含义;   逻辑地址: 这个是邮编一起生成的...因为32地址总线可以存储地址了.所以段寄存器就都为0了.但是是保护模式.所以引入了段选择子. (涉及到内核知识了) 这些了解即可. 三丶16代码编写.   16我们要自己分段.自己写代码....下方代码是一个16汇编程序. data segment ;定义数据段 str db 'HelloWorld$' ;以字节方式在数据段中定义字符串 data...四丶32汇编代码编写.   32汇编代码编写.可以使用RadAsm编写.博客中已经写过.我们主要讲解一下在VC中的写法. 在VC中32下.可以支持内联汇编的....例如: __asm { push eax push ebx pop eax pop ebx } 五丶64汇编写法     64汇编已经不支持我们使用内联汇编

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux64程序中的漏洞利用

    基础知识 寄存器 我们所说的32和64, 其实就是寄存器的大小. 对于32寄存器大小为32/8=4字节, 那64自然是64/8=8字节了....: e8 93 ff ff ff call 660 漏洞利用 回忆一下之前在栈溢出漏洞的利用和缓解中介绍的漏洞利用流程, 我们的目的是通过溢出等内存破坏的漏洞来执行任意的代码...gadget, 关键都是要找libc, 一旦找到libc的基地址, 这场exploit游戏也就宣告结束了. .got.plt 在深入了解GOT,PLT和动态链接中我们知道, 每个函数的PLT中只包含几行代码...于是作者(Hector&Ismael)通过人眼审计可执行文件中的通用代码部分, 发现了两处 有趣的片段, 可以让我们控制edi,rsi和rdx, 并跳转到任意地址....关键是__libc_csu_init这一段代码是所有GNU/cc编译链都会添加带可执行文件中的, 这意味着对于大多数Linux x64下的程序栈溢出漏洞都可以用该方式绕过ASLR执行程序.

    1.2K70

    16汇编指令_汇编语言指令表

    汇编语言特点:与机器相关,执行效率高,调试复杂 汇编语言优缺点:汇编语言和高级语言混合编写,互补 数据表示类型:二进制B,八进制Q,十进制D,十六进制H BCD编码:用二进制来表示十进制数 CPU...控制地址变化方向 中断标志IF,IF=1,允许中断,用于控制外部可屏蔽中断是否可处理 陷阱标志TF,TF=1,处理器处于单步执行指令(处理器每执行一条指令便产生一个内部中断,可以对程序进行单步调试) 16汇编物理地址与逻辑地址转换...:逻辑地址<< 4 + 偏移 = 物理地址(可以有多个逻辑地址) CS(代码段),表示代码段的起始地址 SS(堆栈段),表示堆栈段的起始地址 DS(数据段),表示数据段的起始地址 ES(附加段),表示附加段的起始地址...,附加段是数据段,用于数据保存,串操作指令将附加段作为其目的操作数的存放区域 段前缀CS: ;使用代码段 段前缀SS: ;使用栈段 段前缀DS: ;使用数据段 段前缀ES: ;使用附加段 默认访问...CLD      清方向标志.     STI      置中断允许.     CLI      清中断允许.

    99430

    汇编指令-bic(清除)、orr(或)(3)

    1. bic  (Bit Clear)清除指令 bic指令的格式为: bic{条件}{S}  Rd,Rn,operand  bic指令将Rn 的值与操作数operand2 的反码按逻辑”与”,结果存放到目的寄存器...指令示例: bic R0,R0,#0x1F ; //将R0最低5清零,其余不变。...2.orr 或指令 orr指令的格式为: orr{条件}{S}  Rd,Rn,operand  orr指令将Rn 的值与操作数operand2按逻辑”或”,结果存放到目的寄存器Rd 中。...指令示例: orr R0,R0,#0xd3 ;将R0的第[7:0]与b'1101 0011按或,并保存在R0中 3.eor异或指令(exclusive or) eor指令的格式为: eor{条件}{...// 对r0低5进行清0,清除模式 orr r0,r0,#0xd3 // 低8或(110 10011), 设为管理(svc32)模式,禁止IRQ和FIQ中断

    5.5K60

    32汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式

    32汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式 一丶RadAsm的配置和使用 用了怎么长时间的命令行方式,我们发现了几个问题 1.没有代码提醒功能 2.编写代码很慢,记不住各种声明...首先这里我们注意下面的几个选项 1.编译选项 Assemble : 这个是默认的即可,如果你是编译32程序,那么我们就用 /c /coff 即可,后面几个默认 2.连接选项 link:  一般是默认的...,注入32计算机,并且弹出个信息框 一丶远程线程注入的讲解 在讲解汇编程序注入代码的时候,我们需要先明白,远程线程注入的原理,我会写一个远程线程开发的例子,这样有助于我们理解汇编注入 我们总共需要几步...,你们可以自己去写自己的DLL,比如一个空DLL会有DLL main,也就是dll的入口点 当第一次加载的时候会来信息什么的,所以可以在里面写代码.dll靠自己,这里只提供思路) 二丶汇编代码的注入 注意...下断点之后,消息来了,我们知道了WM_COMMAND消息是0x111,所以就直接调用MessageBox函数了  开始远程线程汇编代码的编写(因时间问题,今天只会讲解一个思路,具体的实现代码回去自己去写一下

    2.7K60

    32汇编第七讲,混合编程,内联汇编

    32汇编第七讲,混合编程 混合编程的概念,有时候我们会想,C语言可不可以调用汇编的函数,或者反过来调用 或者说C语言里面内部直接内联汇编去编写....那么我们现在要调用汇编写的,那么我们用汇编写一个代码 ②,创建汇编程序 创建汇编程序,这个比较简单,我们新建个文件夹,里面新建一个文本文档,后缀名改为ASM,然后用RadAsm打开,开始编写代码 ?...使用RadAsm编写,这样比较快 编写我们的汇编代码 ?...二丶汇编调用C写的函数 汇编调用C写的函数,那么是一样的,因为.obj都是一样的 首先看下汇编代码,汇编代码应该挺熟悉了,(不熟悉,看下以前的) .386 .model flat,stdcall option...至于代码,会上传课堂资料中 四丶压轴的内联汇编 1.内联汇编简单了解 首先我们会想,上面虽然完成的 汇编和C的互相调用,也解决的跨语言的DLL调用 但是觉着还是不好,为什么,因为可能我想写的汇编代码就那么一点

    1.6K100

    16汇编中的伪指令

    ,比如昨天我们写的汇编代码,假设调用一个Call我们每次都要手工处理 保存栈底,开辟就变量空间,保存寄存器环境....每次都要做,特别麻烦,所以编译器帮我们提供了伪指令,只要我们 按照汇编编译器的语法去写...如果 retf 和 retn 不懂的,请看16汇编第十讲完结,里面具体分析了怎么平栈,以及他们两个的区别  2.使用调用约定 langtype 使用调用约定,就不得不调用函数了,我们先简单的调用一下函数...所以都会翻译成等价的汇编代码了,我们看下反汇编,看下参数变为什么样子了 ?...它会自动的完成转换 注意:  1.虽然变成了参数,但其实翻译的汇编代码还是 [bp-xxx],还是不能内存直接给内存 比如不能写成这样 mov nn1,nn2 这样汇编代码翻译过来就是   mov [bp-xxx...while ax == 0 ..... endm 这些很简单了,编译出的汇编代码就是前几天的作业,只要写过就知道汇编代码是什么了,不会的可以自己看下反汇编 四丶汇编中的有参宏,和无参宏,以及条件宏

    1.4K80

    16汇编第六讲汇编指令详解第二讲

    16汇编第六讲汇编指令详解第二讲 1.比较指令   CMP指令   1.CMP指令是将目的操作数减去源操作数,按照定义相应的设置状态标志   2.CMP指令执行的功能与SUB...,这样说吧,上面我们说了,CMP会和跳转一起使用,但是你知道这样的代码吗?...,而汇编是一门艺术,我们学习汇编,并不是学习他的指令或者语法,比如上面简单的三条汇编指令,会汇编的人都能明白,但是我想问一下,什么意思懂吗?...al,2 mov bl,3 mul al 替换成 mov bl,3 mov cl,2 shl bl,cl 仔细看一下,我们转大了,inter指令周期最起码缩少了10倍,所以说有的时候写一行汇编代码,...xor ax,ax (xor代表异或的意思,相同为假,不同为真,ax和ax肯定各个二进制位相同,此时相同为0,则都变成0了) 和上面的一样,ax都是变为0,而我则赚了一个1个指令周期,其实还有很多这样的汇编代码

    1.1K50

    16汇编第一讲简介

    (把汇编代码转换为机器码)  u 反汇编,(把机器代码变为汇编代码)   如果你有一个写到文件的机器码文件,可以当做debug的参数传入,然后u,就可以显示文件中汇编代码了,把机器代码汇编成了汇编代码了...也就是vc中的F5执行) D 部分数据显示 (可以显示一段内存中的数据) n 文件名 (本地创建一个文件, 例如n hello ,不用加双引号包裹) e 指定地址写入,可以指定地址写入一段数据 w 把汇编代码写入到文件...7.w指令,将我们的代码写入到文件 ? 8.利用winhex查看本地文件 ?...其中B8 代表指令MOV 01 00 代表16寄存器AX里面的值 C3 代表ret返回 9.将文件,反汇编汇编代码,当做debug的参数 ?  ...上面说了,ah是高把,我们要显示字符串,需要给这个ah赋值为09 (具体系统调用(也就是API调用显示hello下一讲详细讲解)) 然后dx寄存器我们需要给定一个字符串, (e 指令指定地址 e 108

    99900

    5.2 汇编语言:标志测试指令

    汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。...标志测试指令是汇编语言中用于测试处理器标志状态的指令。标志是位于处理器状态寄存器中的一组特殊标志,用于指示上一个运算的结果是否为零、是否进位/借位、是否溢出等等。...例如,要测试寄存器eax 是否为偶数,可以使用以下代码:test eax, 1jz even_number在这个代码中,使用TEST指令将eax和常数1逐AND运算,并将结果保存到条件码标志中。...例如,要判断eax是否为0并跳转到标号END,可以使用以下代码:cmp eax, 0je END在这个代码中,CMP指令将eax和0相减,不保存结果,而是设置相应的条件码标志。...如下代码片段则是指令的更多使用方法,读者可自行编写代码进行测试,根据注释信息相信很容易理解。

    38620

    5.2 汇编语言:标志测试指令

    汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。...标志测试指令是汇编语言中用于测试处理器标志状态的指令。标志是位于处理器状态寄存器中的一组特殊标志,用于指示上一个运算的结果是否为零、是否进位/借位、是否溢出等等。...例如,要测试寄存器eax 是否为偶数,可以使用以下代码: test eax, 1 jz even_number 在这个代码中,使用TEST指令将eax和常数1逐AND运算,并将结果保存到条件码标志中...例如,要判断eax是否为0并跳转到标号END,可以使用以下代码: cmp eax, 0 je END 在这个代码中,CMP指令将eax和0相减,不保存结果,而是设置相应的条件码标志。...如下代码片段则是指令的更多使用方法,读者可自行编写代码进行测试,根据注释信息相信很容易理解。

    49920

    16汇编第九讲汇编指令以及逆向中的花指令

    16汇编第九讲汇编指令以及逆向中的花指令 一丶LOOP指令(循环指令) 作用:   循环指令利用cx计数器自动减1,方便实现计数循环的程序结构...,可利用性研究出来的,否则汇编代码一多就会很乱,比如有效的管理代码 比如ret指令,其实就是平衡栈的,在C语言中变成了语法,为return了 1.最原始的Call 主程序调用子程序的流程示意图: ?...add ax,bx ret 在这里应该注意到了,我们用Call调用的时候,为什么函数内部要+2 原因是当这个子程序执行完毕的时候,需要返回到主程序执行,所以主程序的下一条指令已经压栈了,所以+2置...我们发现jmp的地方下面申请了一个字节,但是在汇编的时候,这1个字节和mov的机器码在一起了 因而产生的汇编代码就出错了,花指令混淆就是这样,这段代码还是可以正常执行的 对抗手法 1.如果是动态的调试,...那么花指令是没用的(动态调试就是一步一步走)为什么,因为为了保证汇编代码不出错 每走一次代码都会重新反汇编 2.花指令主要对抗的是静态调试,因为病毒是不能运行的,只能看二进制和汇编,这个时候怎么办 我们发现了

    1.5K100

    16汇编第七讲汇编指令详解第第三讲

    16汇编第六讲汇编指令详解第第三讲 1.十进制调整指令 1....逻辑左移: 移动的时候,补零          SHL:逻辑左移,最高位进入CF,最低位补0          SAL:   算术左移,最高位进入CF,最低位补0 其中逻辑左移和算术左移是一样的,一般都会汇编成逻辑左移...逻辑右移SHR 值CF补零 SAR则补符号 移位指令对标志的影响 按照移入的设置进位标志CF 根据移位后的结果影响SF、ZF、PF 对AF没有定义 如果进行一移动,则按照操作数的最高符号是否改变...这个则是最高位给CF保存,然后CF给低位,(相当于中间有一个CF做中转) 带进位的右循环移位RCR ?...首先左移一,最高位置CF,然后带进位左移一,CF则给DX进位,则产生了进位 资料: 链接:http://pan.baidu.com/s/1jHWF2fG 密码:ykum

    1.6K50

    visual studio 2015上写x64汇编

    vs上64的编译器不支持内敛汇编了,只能写成单独的asm文件,然后独立编译。下面就介绍怎么让让vs2015上让项目支持对asm文件进行编译。...接下来,就需要在汇编中写代码来调用c中定义的函数和c中全局变量了。...反正反汇编一x64的代码都有这个东西 call myprint mov r10,g_iValue ; 此处使用中的stdafx.h全局变量。...0x3 在C语言中调用汇编的函数 上面代码写完之后,编译可以通过,但是我们并看不到执行的结果,因为汇编中的func2还并没有被我们调用,想要调用汇编中的func2,首先需要在头文件stdafx.h中做如下声明...win64 api 有时候需要在汇编中调用windows的64的API,在调用API之前首先要明白函数调用约定。

    1.2K20
    领券