evilknight 发表于 2009-7-30 20:15:10

[原]第10天作业7

#include <stdio.h>
#include <stdlib.h>

int test(void)
{
    /*
      B8 23 01 00 00       mov         eax,123h
      BB 20 D5 40 00       mov         ebx,offset test+60h (0040d520)
      FF E3                jmp         ebx
    */
        char a = {'\xb8', '\x23', '\x01', '\x00', '\x00', '\xbb',
                                  '\x20', '\xd5', '\x40', '\x00', '\xff', '\xe3'} ;
    int *p = (int *)a ;
    int t;
    __asm
    {
                pushad
                mov eax, p
                jmp eax
                mov t, eax
                popad
    }
        return t ;
}

int main(void)
{
        int i ;
    i = test() ;
//         __asm
//         {
//                 mov i, eax
//         }
        printf("%d\r\n", i) ;

    return 0 ;
}

[ 本帖最后由 evilknight 于 2009-7-30 22:32 编辑 ]

evilknight 发表于 2009-7-30 20:26:42

// 将这些十六进制数据作为无参函数运行一下,
// 并输出其十进制返回值B8 23 01 00 00 C3

#include <stdio.h>
#include <stdlib.h>

typedef int(* pfn)(void) ;

int main(void)
{
        int i;
        char ch[] = {'\xb8', '\x23', '\x01', '\x00', '\x00', '\xc3', '\x00'} ;
        pfn p = (pfn)&ch;
        i =p() ;
        printf("%d\r\n", i) ;
        return 0 ;
}

[ 本帖最后由 evilknight 于 2009-7-30 22:32 编辑 ]

liang297 发表于 2009-7-30 22:05:31

bs

bs................

wmp1014 发表于 2009-7-30 22:19:49

顶啊。。。。。。。。。。。

evilknight 发表于 2009-7-30 22:29:31

哈,测试的时候不记得改回来了!
页: [1]
查看完整版本: [原]第10天作业7