win32汇编实现拼接SQL语句

落日映苍穹つ 2022-10-29 11:27 425阅读 0赞

字符串合并,在汇编语言,一般是用loop循环和cx寄存器,自己编程实现;

如果是win32汇编,可以使用movsb指令;

一般开发应用程序都会碰到拼接SQL语句,在C#这些语言用字符串连接的加号就可以了;在汇编中如果用上述两种方法,要拼接出SQL语句极其麻烦;

考虑使用调用win32 API来实现;

1.asm; 使用了lstrcpy,lstrcat函数;

MessageBox是调试用的,可注释掉;

  1. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2. ; by bobo
  3. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  4. .386
  5. .model flat, stdcall
  6. option casemap :none
  7. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  8. include windows.inc
  9. include user32.inc
  10. includelib user32.lib
  11. include kernel32.inc
  12. includelib kernel32.lib
  13. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  14. ; Equ 等值定义
  15. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  16. ICO_MAIN equ 1000h ;图标
  17. DLG_MAIN equ 1
  18. IDC_TXT1 equ 2001
  19. IDC_TXT2 equ 2002
  20. IDC_TXT3 equ 2003
  21. IDC_TXT4 equ 2004
  22. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  23. .data?
  24. hInstance dd ?
  25. sztxt1 db 50 dup (?)
  26. sztxt2 db 50 dup (?)
  27. sztxt3 db 50 dup (?)
  28. .data
  29. insstr BYTE "insert into mytable ",0h
  30. jhstr BYTE " + ",0h
  31. caption db "SQL拼接",0
  32. sqlstr BYTE SIZEOF insstr DUP(0),0h
  33. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  34. .code
  35. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  36. _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
  37. mov eax,wMsg
  38. .if eax == WM_CLOSE
  39. invoke EndDialog,hWnd,NULL
  40. .elseif eax == WM_INITDIALOG
  41. invoke LoadIcon,hInstance,ICO_MAIN
  42. invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
  43. .elseif eax == WM_COMMAND
  44. mov eax,wParam
  45. .if ax == IDOK
  46. ;invoke EndDialog,hWnd,NULL
  47. invoke GetDlgItemText,hWnd,IDC_TXT1,addr sztxt1,sizeof sztxt1
  48. invoke GetDlgItemText,hWnd,IDC_TXT2,addr sztxt2,sizeof sztxt2
  49. invoke GetDlgItemText,hWnd,IDC_TXT3,addr sztxt3,sizeof sztxt3
  50. invoke lstrcpy, addr sqlstr, addr insstr
  51. invoke lstrcat, addr sqlstr, addr sztxt1
  52. invoke lstrcat, addr sqlstr, addr jhstr
  53. invoke lstrcat, addr sqlstr, addr sztxt2
  54. invoke lstrcat, addr sqlstr, addr jhstr
  55. invoke lstrcat, addr sqlstr, addr sztxt3
  56. invoke MessageBox,NULL,addr sqlstr,addr caption,MB_OK
  57. invoke SetDlgItemText,hWnd,IDC_TXT4,addr sqlstr
  58. .endif
  59. .else
  60. mov eax,FALSE
  61. ret
  62. .endif
  63. mov eax,TRUE
  64. ret
  65. _ProcDlgMain endp
  66. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  67. start:
  68. invoke GetModuleHandle,NULL
  69. mov hInstance,eax
  70. invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
  71. invoke ExitProcess,NULL
  72. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  73. end start

1.rc;

  1. #include <resource.h>
  2. #define ICO_MAIN 0x1000 //图标
  3. #define DLG_MAIN 1
  4. #define IDC_TXT1 2001
  5. #define IDC_TXT2 2002
  6. #define IDC_TXT3 2003
  7. #define IDC_TXT4 2004
  8. ICO_MAIN ICON "Main.ico"
  9. DLG_MAIN DIALOG 350, 250, 300, 250
  10. STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
  11. CAPTION "Win32汇编拼接SQL语句"
  12. FONT 9, "宋体"
  13. {
  14. EDITTEXT IDC_TXT1, 50, 15, 200, 25, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
  15. CTEXT "姓名:", -1, 5, 15, 40, 25
  16. EDITTEXT IDC_TXT2, 50, 60, 200, 25, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
  17. CTEXT "职务:", -1, 5, 60, 40, 25
  18. EDITTEXT IDC_TXT3, 50, 105, 200, 25, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
  19. CTEXT "部门:", -1, 5, 105, 40, 25
  20. EDITTEXT IDC_TXT4, 50, 150, 200, 25, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
  21. CTEXT "拼接的SQL:", -1, 5, 150, 40, 25
  22. DEFPUSHBUTTON "GO!", IDOK, 58, 210, 50, 14
  23. CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 6, 190, 103, 1
  24. }

运行如下;拼接出的内容放到最后一个文本框;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70

构建过程;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70 1

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70 2

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70 3

  1. 看上去基本可用;拼接出的SQL中的双引号、字段名这些,可自己加、改代码;界面可自己调rc文件;

发表评论

表情:
评论列表 (有 0 条评论,425人围观)

还没有评论,来说两句吧...

相关阅读

    相关 巧用SQL拼接语句

    前言: 在日常数据库运维过程中,可能经常会用到各种拼接语句,巧用拼接SQL可以让我们的工作方便很多,达到事半功倍的效果。本篇文章将会分享几个日常会用到的SQL拼接案例,类似的

    相关 拼接Sql语句小心得

    在往数据库插入数据时,需要根据数据和数据库中的列信息进行拼接,在本篇文章中,输出小心得。使用语言为 `python`。 拼接原始列信息 比如待插入数据库列信息为 `de