第三方二进制汇编代码在VC中的移植和应用

Dsp软件移植 Dsp软件移植 1. 编译平台差异 x86&vc:long 32位;ccs&dm642:long 40位,占用的存储空间是按照64位来计算的; vc&x86中定义了bool数据类型,占用8位;ccs7&dm642中没有,应该事先定义; ccs&dsp/BOIS系统中也定义适用于不同应用场合的数据类型预定义,在std.h和csl-stdinc.h中定义 2. endian问题 dm642:管脚TOU 阅读详情

第三方二进制汇编代码在VC中的移植和应用收藏

作者:老实和尚  coverlove@163.com 1、前言 对于没有源代码的开发库中提供的函数或者关键代码(一般是dll或者exe程序提供)。我们不能分析出其某个函数或者某段代码的实现细节,而又想在自己的工程中进行代码复用,这时我们比较直观的做法就是移植其汇编代码到我们的开发环境中。   本文主要介绍在如何VC (Microsoft Visual C++ 6.0) 中内联汇编代码及其注意事项。主要涉及的工具有OLLYDBG(修改版本的OLLYICE功能更加强大)、Microsoft Visual C++ 6.0。 2、OLLYDBG简介 OllyDbg 是一种具有可视化界面的 32 位汇编-动态分析调试器。它的特别之处在于可以在没有源代码时解决问题,并且可以处理其它编译器无法解决的难题。 运行环境:  OllyDbg 可以以在任何采用奔腾处理器的 Windows 95、98、ME、NT 或是 XP(未经完全测试)操作系统中工作。 支持的处理器:  OllyDbg 支持所有 80x86、奔腾、MMX、3DNOW!、Athlon 扩展指令集、SSE指令集以及相关的数据格式,但是不支持SSE2指令集。 配置:  有多达百余个选项用来设置 OllyDbg 的外观和运行。 数据格式:  OllyDbg 的数据窗口能够显示的所有数据格式:HEX、ASCII、UNICODE、 16/32位有/无符号/HEX整数、32/64/80位浮点数、地址、反汇编(MASM、IDEAL或是HLA)、PE文件头或线程数据块。 3、应用实例 1.jpg        如上图有一个函数PcInfo.dll,里面导出了两个函数,RegistryCode 和IsValidCheckCode。通过OllyICE我们很容易找到这两个函数的实现过程。 2.jpg 第一个函数RegistryCode有三个参数,第一个压栈的是一个字符串的地址,第二个和第三个是一个整数,通过函数返回后对eax寄存器进行了检查可以断定函数带一个int型的返回值。 函数调用后没有进行堆栈的平衡说明这个函数是一个__stdcall方式调用的,堆栈平衡由被调用者平衡。调用方式确定后就可以还原函数原型如下: int __stdcall RegistryCode(int a1,int a2,const char * key) 3.jpg   函数内部代码实现如上图,我们可以将汇编实现代码拷贝出来如下: 10002280 >  83EC 10         sub     esp, 10 10002283    8D4424 00       lea     eax, [esp] 10002287    56              push    esi 10002288    57              push    edi 10002289    33FF            xor     edi, edi 1000228B    57              push    edi 1000228C    50              push    eax 1000228D    57              push    edi 1000228E    68 3F000F00     push    0F003F 10002293    57              push    edi 10002294    57              push    edi 10002295    57              push    edi 10002296    68 44910010     push    10009144    ; ASCII "Software/abc/def" 1000229B    68 02000080     push    80000002 100022A0    FF15 00800010  call   [<&ADVAPI32.RegCreateKeyExA>]  ; ADVAPI32.RegCreateKeyExA 100022A6    85C0            test    eax, eax 100022A8    75 56           jnz     short 10002300 100022AA    8B7424 24       mov     esi, [esp+24] 100022AE    8B0D 88910010   mov     ecx, [10009188] 100022B4    8B15 8C910010   mov     edx, [1000918C] 100022BA    A1 90910010     mov     eax, [10009190] 100022BF    85F6            test    esi, esi 100022C1    894C24 0C       mov     [esp+C], ecx 100022C5    895424 10       mov     [esp+10], edx 100022C9    894424 14       mov     [esp+14], eax 100022CD    74 31           je      short 10002300 100022CF    56              push    esi 100022D0    FF15 24800010   call    [<&KERNEL32.lstrlenA>]     ; kernel32.lstrlenA 100022D6    40              inc     eax 100022D7    8D4C24 0C       lea     ecx, [esp+C] 100022DB    8B5424 08       mov     edx, [esp+8] 100022DF    50              push    eax 100022E0    56              push    esi 100022E1    6A 01           push    1 100022E3    57              push    edi 100022E4    51              push    ecx 100022E5    52              push    edx 100022E6    FF15 04800010   call  [<&ADVAPI32.RegSetValueExA>]  ; ADVAPI32.RegSetValueExA 100022EC    85C0            test    eax, eax 100022EE    75 05           jnz     short 100022F5 100022F0    BF 01000000     mov     edi, 1 100022F5    8B4424 08       mov     eax, [esp+8] 100022F9    50              push    eax 100022FA    FF15 08800010   call    [<&ADVAPI32.RegCloseKey>]  ; ADVAPI32.RegCloseKey 10002300    8BC7            mov     eax, edi 10002302    5F              pop     edi 10002303    5E              pop     esi 10002304    83C4 10         add     esp, 10 10002307    C2 0C00         retn    0C 有两种方法可以复用上面这段代码,第一种方法是把这段代码复制到一个汇编编译器中编译成object,然后在VC中链接这个外部函数,但是这种方法需要额外的编译器,使用起来比较复杂。本文主要介绍第二种方法,就是在VC编译器中复用这段汇编代码,然后直接编译调试。 在 VC编译器中使用内联汇编,有两种方式:一种是在每一条指令前面加上__asm,另外一种方式比较适合大段汇编代码,就是使用__asm { } 包含汇 编代码块。这个不改变变量作用域,只是一个指示符号,注意大部分伪汇编代码VC是不支持的。将以上汇编代码拷贝到VC的函数 int __stdcall RegistryCode(int a1,int a2,const char * key)函数内部,这样一个简单函数初 步实现了,但是还需要作一些调整。 VC内联外部汇编代码需要注意以下几个事项: A.  代码的修正 拷贝出来的汇编代码需 要进行初步处理才能移植到VC的函数中,上面的汇编代码中地址头需要全部删除掉(这个可以在UltraEdit的列模式中复制),对于代码中的常数全部要 加上0x,因为Ollyice拷贝出来的都是16进制数,对应跳转指令可以用原来的标示符号,如jnz     short  100022F5,改成 jnz     short  A100022F5,将地址前加上一个字符,否则VC对于这样的跳转会将数字理解成数字而认为是错误代码,而不会根据目标 标签自动计算偏移量。 B.  堆栈的平衡 由于VC默认为函数生成了保护寄存器的代码,也就是进行了寄存器压栈操作,这样栈顶就可 能改变,因此拷贝过来的汇编代码中基于栈顶取数据的地址就不对了,因为堆栈栈顶已经被VC默认保护堆栈的PUSH指令改变了。最简单的做法就是先平衡堆 栈,也就是先弹出压栈的寄存器,这样拷贝过来的汇编代码在函数内部运行的环境就是干净的,无污染的,而VC在DEBUG模式和RELEASE模式为函数生 成的保护寄存器的代码是不同的,需要分别处理来平衡堆栈。(注:如果不想VC生成保护寄存器的代码,可以加上关键 字:__declspec( naked ),这样就不需要平衡堆栈了,可以连这一步都省了,但是了解编译器的一些行为对内联汇编的成功与否很重要) C.  地址的处理 对于汇编代码中出现的地址,有些是字符或者整数数组的首地址,需要在全局或者局部建立字符串数组,然后替换成字符数组的地址。对于VC而言,指针类型的变量本身就是地址,因此在汇编代码中直接使用指针名称,而不需要LEA(或者OFFSET伪指令)来计算地址。 D.  函数调用的处理 对 于汇编中使用到的函数需要加入其相应的Lib文件,对于Windows Api只需要加入Windows.h文件即可,这样VC才会为使用到的函数加入导 入表和函数符号。对于外部DLL中的函数调用需要注意的是,必须使用间接寻址方式调用函数,而不能是立即数地址,也就是使用FirstThunk+RVA 的方式来寻址,由PE加载器动态填充的地址代替实际地址,而FirstThunk+RVA的地址在编译过程中就可以惟一确定。对于静态连接的函数如 printf等这些函数,则使用直接调用方式,调用地址是立即数。而编译器对于有些外部导出函数,采用一个call(立即数)+ jmp(间接寻址)方式 实现。 具体实现过程: 添加需要使用的全局字符串,定义如下: char *key1="Software//abc//def"; char *key2="InstallCode"; 由于DEBUG模式VC默认为函数生成了保护寄存器的代码,总共对4个寄存器进行了保护,因此我们在函数的入口处平衡堆栈,代码如下: __asm     {       pop edi       pop esi       pop ebx       pop ebp     } 如果是RELEASE模式,则只对3个寄存器进行了压栈保护,因此我们在函数的入口处平衡堆栈,两种模式可以合成写成如下的方式: //还原堆栈,VC为函数默认生成了保护寄存器的代码   #ifdef _DEBUG   //DEBUG模式和RELEASE模式生成的保护寄存器的代码不一样     __asm     {       pop edi       pop esi       pop ebx       pop ebp     }   #else      __asm     {       pop edi       pop esi       pop ebp     }   #endif 上面的一段代码,可以使用在函数前面加上__declspec( naked )的方法来替代。 移植的部分代码加到上面的代码后面即可,具体修改如下: __asm   {     sub     esp, 0x10     lea     eax, dword ptr [esp]     push    esi     push    edi     xor     edi, edi     push    edi     push    eax     push    edi     push    0x0F003F     push    edi     push    edi     push    edi     push    key1   //如果是指针直接使用指针名称,否则使用lea eax, key1;  push eax方式     push    0x80000002     call dword ptr [RegCreateKeyExA] //此处不能使用call RegCreateKeyExA,只能进行间接寻址调用      test    eax, eax     jnz     short  A10002300 //使用标签让VC自动计算偏移地址,不能使用纯数组标签     mov     esi, dword ptr [esp+0x24]          mov     eax, key2     mov     ecx, [eax]     mov     edx, [eax+4]     mov     eax, [eax+8]     test    esi, esi     mov     dword ptr [esp+0x0C], ecx     mov     dword ptr [esp+0x10], edx     mov     dword ptr [esp+0x14], eax     je      short  A10002300  //使用标签让VC自动计算偏移地址          push    esi     call dword ptr [lstrlenA]  //此处不能使用call lstrlenA,只能进行间接寻址调用          inc     eax          lea     ecx, dword ptr [esp+0x0C]     mov     edx, dword ptr [esp+0x08]     push    eax     push    esi     push    1     push    edi     push    ecx     push    edx     call dword ptr [RegSetValueExA]  //此处不能使用call RegSetValueExA,只能进行间接寻址调用             test    eax, eax     jnz     short  A100022F5     mov     edi, 1 A100022F5:     mov     eax, dword ptr [esp+0x08]     push    eax     call dword ptr [RegCloseKey]    //此处不能使用call RegCloseKey,只能进行间接寻址调用 A10002300:     mov     eax, edi     pop     edi     pop     esi     add     esp, 0x10          retn    0x0c   } 全部源代码如下: // PCInfoAPI.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #define PCInfoAPI_EXPORTS #ifdef PCInfoAPI_EXPORTS #define PCInfoAPI_API extern "C" __declspec(dllexport) #else #define PCInfoAPI_API __declspec(dllimport) #endif BOOL APIENTRY DllMain( HANDLE hModule,                         DWORD  ul_reason_for_call,                         LPVOID lpReserved            ) {     return TRUE; } char *key1="Software//abc//def"; char *key2="InstallCode"; PCInfoAPI_API  int __stdcall RegistryCode(int a1,int a2,const char * key) {   //还原堆栈,VC为函数默认生成了保护寄存器的代码   #ifdef _DEBUG //DEBUG模式和RELEASE模式生成的保护寄存器的代码不一样     __asm     {       pop edi       pop esi       pop ebx       pop ebp     }   #else      __asm     {       pop edi       pop esi       pop ebp     }   #endif   __asm   {     sub     esp, 0x10     lea     eax, dword ptr [esp]     push    esi     push    edi     xor     edi, edi     push    edi     push    eax     push    edi     push    0x0F003F     push    edi     push    edi     push    edi     push    key1             push    0x80000002     call dword ptr [RegCreateKeyExA]     test    eax, eax     jnz     short A10002300     mov     esi, dword ptr [esp+0x24]     //mov     esi,  key          mov     eax, key2     mov     ecx, [eax]     mov     edx, [eax+4]     mov     eax, [eax+8]     test    esi, esi     mov     dword ptr [esp+0x0C], ecx     mov     dword ptr [esp+0x10], edx     mov     dword ptr [esp+0x14], eax     je      short A10002300          push    esi     call dword ptr [lstrlenA]          inc     eax          lea     ecx, dword ptr [esp+0x0C]     mov     edx, dword ptr [esp+0x08]     push    eax     push    esi     push    1     push    edi     push    ecx     push    edx     call dword ptr [RegSetValueExA]              test    eax, eax     jnz     short A100022F5     mov     edi, 1 A100022F5:     mov     eax, dword ptr [esp+0x08]     push    eax     call dword ptr [RegCloseKey]     A10002300:     mov     eax, edi     pop     edi     pop     esi     add     esp, 0x10          retn    0x0c   } }
ET199加密狗ETFS文件全流程制作包:含汇编启动代码、C读写逻辑、HEX/BIN转换工具与实操视频 专为嵌入式工程师准备的ET199加密狗ETFS虚拟文件开发支持包,覆盖从底层代码编写到最终烧录的完整环节。包含STARTUP.A51汇编启动文件、ET199.h及ET199_32.h头文件定义、read.c等C语言读写实现模块;提供WriteRead工程全套VC6.0项目文件(.dsw/.dsp/.clw),可直接编译调试或二次开发;配套hexbin.exe工具用于HEX与BIN格式互转,内置ET199.bin和ET199.hex固件镜像,以及test.etfs标准虚拟文件样本;附AVI格式实操教程视频,演 阅读详情

相关推荐

分别用VB、Delphi、VC++、ASM四种语言写的一个修改EXE文件图标的多源码示例

分别用VB、Delphi、VC++、ASM四种语言写的一个用UpdateResource修改EXE文件图标的多源码示例

dll文件的动态调用

dll文件动态调用时需要知道dll文件中的函数名字,生成dll文件后函数名字可能会变化(动态调用dll文件中的函数会失败,只有dll文件没有lib文件时,需要对dll文件进行动态调用才能使用dll文件中的函数。函数能够准确找到对应的导出函数。def文件通过右击源文件进行添加。运行结果如下,可以看出,能够正确调用subtruct函数进行计算。()返回值为0),这时候需要用def文件进行命名。这里导出两个函数add和subtruct。主函数中添加上述代码即可完成动态调用。def文件中给两个导出函数命名,确保。

weixin_44087011的博客 873

VB代码演示如何注入/操作汇编指令.rar

一个VB汇编CALL注入源码,演示如何操作汇编指令,使用此类不需要任何第三方软件支持,并且开源,内带两个实例,一个是网游诛仙CALL的注入,还有一个是演示如何操作汇编指令,汇编基础类里基本包含了常用的汇编指令,如果用户觉得不够可以使用OD等有汇编,功能的软件提取机械吗添加类内..   提示一下:   有些CALL使用ECX,EDX等寄存器来实现,类里可能没有,但是同类的EAX我绝对是加入的,如果使用EAX程序逻辑不会出现错误的话,请用EAX可以代替,一般都可以的.

InlineHook

计算偏移 = 自己创建的函数的地址 - 要Hook的函数地址 - 5,第一个字节为0xE9,构成无条件跳转指令。将前面构造的无条件跳转写入Hook函数地址处,大小为5字节,并保存之前的数据,以便修复。构建自己函数的时候一定要加上调用约定,否则新函数会默认使用C语言的调用约定,这回。加载函数所在的模块,获取要Hook的函数地址。导致在函数返回过程中,因堆栈不平衡而报错。根据要hook函数的原型创建自己的函数。修改目标页属性,是其可读可写可执行。

m0_46135508的博客 638

修改VB6的编译器C2.exe使它可以输出汇编代码

修改VB6的编译器C2.exe使它可以输出汇编代码;VB6.exe可以将cls模块、普通模块、窗体代码frm先生存汇编代码文件,然后再继续编译,但我们看不到这些代码,是因为编译器C2.exe隐藏或删除了,为了在VB6的程序里可以嵌入汇编代码或C代码,就要让C2.exe将这些汇编代码文件保留下来,修改其中嵌入的汇编代码或C代码,供汇编代码编译器如masm32等或C语言编译器cl.exe继续编译为obj文件,然后再链接成exe可执行文件或dll文件。 将这个程序生成的可执行文件命名为C2.exe,将VB6原来的C2.exe命名为C3.exe,再编译时就可生成汇编代码了。 这个程序事实上截留了VB6传给C2.exe的命令行参数,再调用原来的C2.exe而使得汇编代码保留下来

解决Matlab激活后License checkout failed问题的详细步骤与避坑指南

本文详细解析了Matlab激活后出现License checkout failed错误的常见原因及解决方案,重点介绍了如何正确找到并运行激活程序,避免用户名填写错误等常见问题。文章还提供了多次激活与疑难排解的实用建议,帮助用户顺利完成Matlab激活过程。

weixin_33670786的博客 584

第三方二进制汇编代码在VC中的移植和应用收藏

作者:老实和尚  coverlove@163.com1、前言对于没有源代码的开发库中提供的函数或者关键代码(一般是dll或者exe程序提供)。我们不能分析出其某个函数或者某段代码的实现细节,而又想在自己的工程中进行代码复用,这时我们比较直观的做法就是移植其汇编代码到我们的开发环境中。  本文主要介绍在如何VC (Microsoft Visual C++ 6.0) 中内联汇编代码

大浪淘沙的专栏 754

告别手动点鼠标:用Python脚本批量跑ADS版图仿真,效率提升10倍(附完整代码)

本文详细介绍了如何利用Python脚本自动化ADS版图仿真流程,显著提升射频工程师的工作效率。通过调用ADS底层接口,实现参数化修改、批量任务调度和结果自动收集,解决了手动操作中的常见问题,如仿真不更新等。附完整代码,帮助开发者快速实现10倍效率提升。

weixin_42523543的博客 332

如何在VC中汇编,调用Nasm编写的函数

导读:   我们一般会使用汇编来编写程序中效率瓶颈部分, 而这又包括两种方法, 一是采用内联汇编, 这是十分简洁方便的一个方法, 我们可以不必考虑如寄存器保护, 函数参数退栈之类繁琐的问题, 但其缺点是可移植性不强, 影响代码风格等. 而另一个就是本文要讲的, VC链接纯汇编函数.好,言归正传, 我们开始   一,工具   1) VC++2003, 本文所讲的操作都是基于此版本.   2)

xu的blog 1955

【深度学习】tensorboard中的图片放到论文中

1. 利用tensorboard中的导出数据功能 选中左上角的标签,然后选择csv格式的数据下载即可。 左边的smoothing 数值不影响导出数据的大小。 2.tensorboard 图下标签介绍: 放大 Toggle y-axis log scale:将y轴对数化 Fit domain to data:如果拖动了图片等,再重新回到原始位置 Download Current Chart as SVG 3.用下载下来的csv数据来画图 第一幅图片:训练的平均长度 fig, ax1 = plt.sub

gaocui883的博客 1万+

搜索引擎——ElasticSearch汇总

汇总——ElasticSearch篇 全文检索 问题1:什么是全文检索? 基本概念:对**非结构化数据/结构化数据**先建立**索引**,再对索引进行搜索**文档**的过程叫做全文检索。 什么是非结构化与结构化数据? - 非结构化数据:没有固定的格式的数据(html,word,excel)---没有固定长度,字段约束,描述,散列数据 - 结构化数据:有固定的格式的数据(如:数据库数据)---有固定长度(varchar(50)),字段类型,描述修饰数据 搜索算法:顺序扫描法、倒排索引法 - 顺序

alonewolf_99的博客 1841

在VC2008下将32位C++内嵌汇编迁移到64位

http://blog.sina.com.cn/s/blog_6296cebc0100fa5g.html 在VC2008下将32位C++内嵌汇编迁移到64位 ——东方射日—— 为什么要汇编? 现在正在做的一个项目,是关于高密度计算的,由于计算量很大,从性能考虑,除了算法的优化外,其中的的核心代码是用汇编写的,也许有人说,现在还有用汇编的吗?编译器的优化已

逐月 1177

大红球预警版-精选+自定义板块监控

这是一款简单易用的股票大单资金监控插件,兼容通达信软件,可嵌入分时图或定制版面。它以红绿圆球直观显示主力买卖情况(红球为买,绿球为卖),支持300万以上大单语音播报。插件提供实时资金流向分析、多股同时监控、自定义预警条件等功能,无需L2账号。用户可自由切换图形/列表模式,监控特定板块,并配合幻影软件实现自动交易。虽然上涨股通常红球占优,但需结合其他指标综合判断。该插件完全免费,包含详细视频教程,适合新手使用。

guleba的博客 1795

将32位C++内嵌汇编迁移到64位

现在正在做的一个项目,是关于高密度计算的,由于计算量很大,从性能考虑,除了算法的优化外,其中的的核心代码是用汇编写的,也许有人说,现在还有用汇编的吗?编译器的优化已经很好了,性能已经非常接近于汇编了,有必要用汇编实现吗?呵呵,再好编译器的优化也没有人工优化好。是的,两者的性能相差不大,可是也有10%-20%的差距啊,尤其是作为核心代码,在一个典型过程中要执行400万到1000万次,那么性能相差是相

0li's Blog 5140

LoRa模块选型指南:正点原子ATK-LORA-01与SX1278芯片深度评测(含实测距离/功耗数据)

本文深度评测了正点原子ATK-LORA-01与SX1278芯片的性能表现,通过实测数据展示其在复杂环境中的通信距离与功耗表现。特别适合智慧农业、工业监测等物联网应用场景,提供详细的配置指南和优化技巧,帮助开发者实现高效、低功耗的LoRa通信解决方案。

weixin_29191081的博客 291

libmad库的移植

win mobile 5上面播放mp3似乎已经有了可以依赖于win mobile提供的multi-media播放器的调用方法。这种显而易见的方法,我认为缺少一些主动性,只能微软怎么做,咱就怎么做。如果想做出个性化的软件或者播放器,或者实现在线边下载边播放的方案就很困难了。对于从moto的linux移植到win mobile的5mbox而言,我更熟悉传统的一些的处理mp3文件的方案。     基本

wenchuan_swjtu的专栏 1540

DeepSeek在实时计算与流处理系统中的突破性实践

对于技术决策者而言,现在正是将DeepSeek实时计算技术纳入企业架构蓝图的关键时机,那些能够率先构建实时智能能力的企业,将在数据驱动的商业竞争中赢得决定性优势。DeepSeek通过创新的流处理架构,成功将复杂事件处理(CEP)的延迟降低到亚秒级,同时保证了计算结果的精确性。DeepSeek研发的神经架构搜索(NAS)与知识蒸馏联合优化框架,可在保持模型精度的前提下,将参数量压缩至原始模型的1/100,实现边缘设备的实时AI推理。随着5G和物联网技术的普及,对实时处理能力的需求将呈指数级增长。

Programming Talk 291

用C++进行跨平台和可移植开发的注意事项

概述   今天聊聊C++的可移植性问题。如果你平时使用C++进行开发,并且你对C++的可移植性问题不是非常清楚,那么我建议你看看这个系列。即使你目前没有跨平台开发的需要,了解可移植性方面的知识对你还是很有帮助的。   C++的可移植性这个话题很大,包括了编译器、操作系统、硬件体系等很多方面,每一个方面都有很多内容。鉴于本人能力、精力都有限,只能介绍每一个方面最容易碰到的问题,供大伙儿参考。

System Architect 3956

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

f77编程和c语言的区别,在fortran中l用F77编译器编译程序时出现问题?

高级语言、汇编语言、机器语言这三种语言统称“计算机语言”。其中,机器语言是最低级的,是一串一串的电流表示“0001101010010110010101000110”之类的数据,全部由0和1组成,这样的语言是机器语言,只有机器才能记住这样冗长而没规律的数据,所以,用机器语言来编程序几乎是不可能的。但要命令机器做一样事情,必须用机器语言,怎么办呢?于是,产生了汇编语言,汇编语言比机器语言简单一点,但还...

weixin_39963853的博客 322

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 程序的自我修改
下一篇: 利用socket转发和反弹端口技术突破防火墙进入内网
大浪淘沙1
博客等级 码龄19年 42粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值