小编rkh*_*khb的帖子

我应该依赖动态加载的程序集吗?

我有以下情况.

  • 程序集D包含类Data.
  • 程序集F1包含创建,填充和返回的类Data.
  • 程序集F2包含类,它接受Data作为输入.

诀窍是,所有这些程序集都是插件并动态加载.当然,F1和F2都引用D,但在运行时,所有三个都由主机应用程序加载.

现在如果有人用更新的版本替换D二进制文件会有什么变化呢?

我写了一个测试应用程序,它做了类似的事情,结果如下:

  • 在类Data中添加新字段不会导致异常;
  • 用另一个字段替换现有字段会导致TargetInvocationException包含信息,请求字段不存在

如果.NET跟踪接口调用,我很好.那是因为访问库中未更改的部分只会起作用,如果该部分发生变化,我只会告诉我一个例外.因此它将工作(在接口级别上)或不工作 - 没有未定义的行为.

我的问题:

  • 如何在运行时解析类型 - 特别是在不匹配的程序集版本的情况下?.NET是否跟踪字段/属性/参数/返回值类型和名称?
  • 有没有办法在某些特定版本中强制引用程序集?

.net c# dynamic .net-assembly

5
推荐指数
1
解决办法
120
查看次数

汇编 - 用于排序字符串的冒泡排序

我正在使用tasm编写程序集.我的任务是编写一个程序,使用冒泡排序按字母顺序对输入的字符串进行排序.防爆.如果你输入"你好",它应该写"ehllo".我已经写了乞求输入字符串并对它进行排序(我认为它工作直到它应该打印出结果的结尾,但最后它只是写了我的.data一次并完成它的工作)PS对不起英语

.model small
.stack 100h

.data
request     db 'This program is using bubblesort to get alphabetical order of your enterd string', 0Dh, 0Ah, 'Enter your string:', 0Dh, 0Ah, '$'
result      db 0Dh, 0Ah, 'Result:', 0Dh, 0Ah, '$'
buffer      db 100, ?, 100 dup (0)

.code

start:
MOV ax, @data                   
MOV ds, ax                      


MOV ah, 09h
MOV dx, offset request
int 21h


MOV dx, offset buffer           
MOV ah, 0Ah                     
INT 21h                         


MOV si, offset buffer           
INC si                          
MOV bh, [si]                    
INC …
Run Code Online (Sandbox Code Playgroud)

sorting assembly tasm bubble-sort

5
推荐指数
1
解决办法
8123
查看次数

ASM如何知道算术运算是有符号还是无符号?

我正在使用MASM 14.0进行组装,我对以下代码的输出感到困惑.

TITLE Exercise 4 from chapter 4

; Author : Saad Ahmed

INCLUDE Irvine32.inc

.code
main PROC

mov eax, 0
mov al, 255
add al, 1
call DumpRegs       ; Display registers

mov al, 127
add al, 1
call DumpRegs       ; Display registers

exit
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)

两个算术运算都在无符号整数255和127上完成.

但是,CPU将第一个操作255视为无符号整数并设置进位标志,当您将1添加到无符号255时会发生这种情况.

完整的状态标志是CF = 1 SF = 0 ZF = 1 OF = 0 AF = 1 PF = 1,eax为0

但是,第二个操作将127视为有符号整数,因为它设置了溢出标志,如果你将1加到+127就会发生这种情况.

完整的状态标志为CF = 0 SF = 1 ZF = 0 OF = …

x86 assembly masm irvine32

5
推荐指数
2
解决办法
415
查看次数

ld MinGW 链接到标准 C 库

我对以下代码有问题。

extern printf
global _main
main:
push msg
call printf
ret
msg db "Hello world",0
Run Code Online (Sandbox Code Playgroud)

我使用 NASM 组装它,nasm -fwin32 test.asm然后使用 链接它ld test.obj。它告诉我“ test.obj:test.asm:(text+0x6): undefined reference to 'printf'

如何将我的文件链接到标准 C 库?我有最新的 MinGW 的 ld。

windows x86 assembly mingw nasm

4
推荐指数
1
解决办法
4242
查看次数

Laravel PHP:同时运行多个项目

我想同时运行多个laravel框架工作项目.究竟该怎么做我不知道.

我使用了一个命令:php artisan serv --port = 8080,在端口8080上运行另一个项目.当我在cmd中使用此命令时,它显示错误:

在此输入图像描述

php localhost laravel-4 laravel-5

4
推荐指数
2
解决办法
6926
查看次数

汇编:数组编写问题

我创建了以下程序来读取5个数字,然后dumpreg查看输入的数字...

        INCLUDE Irvine32.inc

    .data
    count = 5
    scores WORD count DUP(? )
    prompt BYTE "Please type an integer score: ", 0

    .code
    GetScores PROTO, wArray:PTR WORD, arraySize : WORD

    main proc


    INVOKE GetScores,OFFSET scores, count

    mov esi, OFFSET scores
    mov ecx, count
    mov ebx, 2
    call DumpMem
    mov eax, 50000
    call Delay

    exit
    main endp

    GetScores PROC, wArray:PTR WORD, arraySize : WORD
    push ebp
    mov ebp, esp
    pushad

    mov esi, wArray
    movzx ecx, arraySize
    cmp ecx, 0; ECX …
Run Code Online (Sandbox Code Playgroud)

x86 assembly masm irvine32

4
推荐指数
1
解决办法
106
查看次数

无效的'asm':嵌套的汇编方言替代品

我正在尝试使用k1om-mpss-linux-gcc编译器为Xeon Phi平台编写一些带有KNC指令的内联汇编代码.我想在我的代码中使用掩码寄存器来向量化我的计算.这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <assert.h>
#include <stdint.h>

void* aligned_malloc(size_t size, size_t alignment) {

    uintptr_t r = (uintptr_t)malloc(size + --alignment + sizeof(uintptr_t));
    uintptr_t t = r + sizeof(uintptr_t);
    uintptr_t o =(t + alignment) & ~(uintptr_t)alignment;
    if (!r) return NULL;
    ((uintptr_t*)o)[-1] = r;
    return (void*)o;
}

int main(int argc, char* argv[])
{
    const int vectorSize = 16;
    int * n_arr = (int *) aligned_malloc(16 * sizeof(int),64);
    int * lenS_arr = (int *) aligned_malloc(16 …
Run Code Online (Sandbox Code Playgroud)

assembly gcc inline-assembly xeon-phi avx512

4
推荐指数
1
解决办法
329
查看次数

将C代码翻译为Assembly

我需要将此C代码转换为汇编语言代码

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

int main(void)
{
    int answer, i;
    int right, wrong;
    right = 0;
    wrong = 0;

    for(i =1; i < 11; i = i+1){
        printf("What is %d + %d? ", i,i);
        scanf( "%d", &answer);

        if(answer == i + 1) {
            printf("right!  ");
            right++;
        }
        else {
            printf("Sorry, you're wrong.    ");
            printf("The answer is %d.   ", i + 1);
            wrong++;
        }
    }
    printf("You got %d right and %d wrong. ", right, wrong );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我真的只需要知道如何将变量与汇编语言中的字符串组合在一起,就像上面的C代码一样.我想我可以处理其他一切.有人可以告诉我.我是否必须使用某种参考[]. …

c x86 assembly masm irvine32

3
推荐指数
2
解决办法
1636
查看次数

LNK 2001无法解析的外部符号_mainCRTStartup MASM

我正在我的大学学习汇编语言,并获得了包含MASM 615的CD,并且正在使用Irvine32包含库。一切都可以在学校计算机上正常运行,但是当我尝试在家用计算机上编译并运行相同的代码时,出现链接错误。

INCLUDE Irvine32.inc

.code
main PROC

mov eax,10000h      ; EAX = 10000h
add eax,40000h      ; EAX = 50000h
sub eax,20000h      ; EAX = 30000h
call DumpRegs

exit
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)

该代码在学校的PC上运行良好。在家里,我进入DOS,将路径设置为MASM文件夹,然后执行Make32文件。

这是我得到的错误:

LINK32 : error LNK2001: unresolved external symbol _mainCRTStartup
test.exe : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)

该程序进行编译(我得到了.lst,.obj和.pdb文件),仅此而已。我想这是因为我家里有一个64位操作系统,但是我不知道如何在64位环境中启动和运行它-CD或本书在64位系统上没有任何内容。只有一个make16或make32 .bat文件。这真是个无赖,因为这意味着除非有工作要做,否则我不能在家做任何工作?

assembly linker masm irvine32

3
推荐指数
2
解决办法
1万
查看次数

如何在C中找到函数的返回地址?

我想通过阅读CodeProject上的文章使用C和GCC AT&T风格的内联汇编少量这里.我希望这样做的主要原因是找到EIP寄存器的旧值,以便能够在我的代码中拥有可靠的指令地址.我写了一个简单的示例程序来证明我对此概念的理解:

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

int mainReturnAddress = 0;

int main()
{
    asm volatile (
         "popl %%eax;"
         "pushl %%eax;"
         "movl %%eax, %0;"
         : "=r" ( mainReturnAddress )
       );

    printf( "Address : %d\n",  mainReturnAddress );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此特定示例的目的是从堆栈顶部弹出4个字节,表示从EIP寄存器保存的32位返回地址,然后将其推回堆栈.然后,我将它存储在全局mainReturnAddress变量中.最后,我打印存储在mainReturnAddress中的值.

我的输出来自此代码4200560.

这段代码是否达到了上述目的,这是Windows平台上32位的跨处理器吗?

c windows assembly gcc inline-assembly

3
推荐指数
1
解决办法
1003
查看次数