C++内嵌汇编代码,简单文件加密

#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char* argv[]){
    if(argc < 3){
        cout<<"Usage: Project infile outfile"<<endl;
        return -1;
    }
    const int BUFSIZE = 2000;
    char buf[BUFSIZE];
    unsigned int count;    // char count
    unsigned int encryptMask;
    cout<<"Encryption code[0-255]?";
    cin>>encryptMask;
    if(encryptMask<0 || encryptMask > 255){
        cout<<"between 0 and 255."<<endl;
        return -1;
    }
    unsigned char encryptCode = (unsigned char)encryptMask;
    ifstream infile(argv[1],ios::binary);
    ofstream outfile(argv[2],ios::binary);

    cout << "Reading "<<argv[1]<<"and createing"<<argv[2]<<endl;
    while(!infile.eof()){
        infile.read(buf,BUFSIZE);
        count = infile.gcount();
        if(count==0)break;
        __asm{
            lea esi, buf
            mov ecx,count
            mov al,encryptCode
L1:
            xor [esi],al
            inc esi
            loop L1
        }
        outfile.write(buf,count);
    }
    infile.close();
    outfile.close();
    return  0;
}
时间: 2024-10-29 19:11:16

C++内嵌汇编代码,简单文件加密的相关文章

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的

GCC在C语言中内嵌汇编 asm __volatile__

转自 http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编例: __asm__ __volatile__("hlt"); "__asm__"表示后面的代

arm 内嵌汇编

内嵌汇编代码,每一个input和output operand,由被方括号[]中的符号名,限制字符串,圆括号中的C表达式构成 // example static inline void __down_write(struct rw_semaphore *sem) {     long oldcount; #ifndef    CONFIG_SMP     oldcount = sem->count;     sem->count += RWSEM_ACTIVE_WRITE_BIAS; #else

内嵌汇编与C/C++实现的冒泡排序,快速排序算法排序500W个数据对比

内嵌汇编是微软为了提高程序的直接操作硬件能力,以及实现大任务程序效率的提高,而嵌入在VC中的,他不依赖于汇编器对内嵌汇编代码进行汇编,这些内嵌汇编代码由C编译器内部实现,可以使程序好像自陷到汇编状态一样.这意味着你如果在C/C++程序中使用了 inline  asm进行 汇编 那么 就注定无法跨平台的,对于没有汇编基础的同学是需要去学习下王爽的8086汇编程序设计.,因为有些时候C++程序员是不得不懂这些东西的 ,否则你永远无法知道编译器为你的函数做了什么,.你还有哪些地方需要优化, 不管处于什

内存四域,变量声明和定义,寄存器,c内嵌汇编,auto,堆栈,常量,静态变量

 1.内存四大区域 2.在程序中,变量的声明可以有多份,定义只能有一份 3.寄存器在cpu里面,没有地址 4.c语言内嵌汇编语言 5.auto变量 自动分配内存,自动释放内存. 6.栈的大小由编译器决定 修改栈的方式,右击项目à属性à配置属性à链接器à系统à堆栈保留大小 7.卡死cpu,卡死内存的程序 8.在堆上申请空间后赋值后,不可以释放内容.要通过free方法进行释放对空间. 9.常量字符串在代码区.代码区是智能读的. 10.常量本质 10.静态变量,全局变量的差别 A全局变量可以跨文件

VC内嵌汇编基础知识

http://www.cppblog.com/xingkongyun/archive/2008/12/21/70003.html 为了加速游戏,一提起汇编语言,大家也许会感到很神秘.其实如果你学起来就会发现,它并非想象中那样难.特别是内嵌汇编,由于它和C++紧密结合, 使你不必考虑很多烦琐的细节(例如输入输出函数的写法),学习起来比较容易.使用内嵌汇编,特别是使用MMX指令,可以大大提高各种游戏中常见特效的速 度,对于编出一个漂亮的游戏非常重要.学好汇编语言还有一个特别有趣的用处:可以观察和看懂

64位驱动里实现内嵌汇编

有些操作非要使用汇编语言不可,比如想获取 CPU 的信息,必须用 CPUID 指令,但是64 位的微软编译器都不再允许内嵌汇编了,这可怎么办呢?标准方法是使用 ASM 文件和 C文件进行混合编译,但这种方法很麻烦,特别是只要嵌入一小段汇编的情况下.所以我的解决方法是,用软件把汇编转换成机器码,然后直接执行机器码.64 位汇编转换机器码的工具可以用我的 X64ASM_TO_X64BIN(http://www.vbasm.com/thread-5651-1-1.html).先来说说如何使用 X64A

内嵌汇编

static inline void arch_spin_lock(arch_spinlock_t *lock) {     unsigned long tmp; __asm__ __volatile__( "1: ldrex   %0, [%1]\n"           "   teq %0, #0\n"                         WFE("ne") "   strexeq %0, %2, [%1]\n&quo

Ok6410裸机驱动学习(三)C语言内嵌汇编

1.C语言内嵌汇编使用方法 C内嵌汇编以关键字”_asm_或asm开始,下辖4个部分,各部分之间用“:”分开,第一部分是必须写的,后面3个部分可以省略,但是分号:不能省略 优化后的代码 2.汇编程序框架 .section .data <初始化的数据> .section .bss <未初始化的数据> .section .text .global _start _start: <汇编代码>